社区
Java SE
帖子详情
普通类实例为什么不能直接调用Object的clone方法
caibird1024
2011-06-30 11:51:09
rt
...全文
665
10
打赏
收藏
普通类实例为什么不能直接调用Object的clone方法
rt
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
caibird1024
2011-06-30
打赏
举报
回复
[Quote=引用 5 楼 alexandertech 的回复:]
Object的clone()被声明为proctected,让你无法从外部调用,其实就是等你为自己的类实现可从外部调用的clone()方法。
JDK并不预知你的自定义类包含有哪些数据及变量,因此最终clone()的实现一定得自力更生。
[/Quote]
protected在子类中应该也是可见的吧?还是我基础知识没掌握好?
caibird1024
2011-06-30
打赏
举报
回复
[Quote=引用 3 楼 sunyiz 的回复:]
如果是你自己的类
那你肯定要自己实现clone()
方法
某些类的clone()的方法可以直接用
那是应为他们的clone()方法已经被实现了
[/Quote]
这我也知道
我纠结饿的是类实例调用object的clone方法eclipse提示The method clone() from the type Object is not visible。clone()方法是protect为什么不可见
飞跃颠峰
2011-06-30
打赏
举报
回复
Object的clone()被声明为proctected,让你无法从外部调用,其实就是等你为自己的类实现可从外部调用的clone()方法。
JDK并不预知你的自定义类包含有哪些数据及变量,因此最终clone()的实现一定得自力更生。
桃园闲人
2011-06-30
打赏
举报
回复
[Quote=引用 3 楼 sunyiz 的回复:]
如果是你自己的类
那你肯定要自己实现clone()
方法
某些类的clone()的方法可以直接用
那是应为他们的clone()方法已经被实现了
[/Quote]
支持!
sunyiz
2011-06-30
打赏
举报
回复
如果是你自己的类
那你肯定要自己实现clone()
方法
某些类的clone()的方法可以直接用
那是应为他们的clone()方法已经被实现了
五哥
2011-06-30
打赏
举报
回复
Object 类的 clone 方法执行特定的克隆操作。首先,如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException。注意:所有的数组都被视为实现接口 Cloneable。否则,此方法会创建此对象的类的一个新实例,并像通过分配那样,严格使用此对象相应字段的内容初始化该对象的所有字段;这些字段的内容没有被自我克隆。所以,此方法执行的是该对象的“浅表复制”,而不“深层复制”操作。
五哥
2011-06-30
打赏
举报
回复
Object 类本身不实现接口 Cloneable,所以在类为 Object 的对象上调用 clone 方法将会导致在运行时抛出异常。
OPPPPOP
2011-06-30
打赏
举报
回复
回帖就有分拿也是吧 哈哈
你不在自己类中重写clone方法 又想调这个类所继承的clone方法的话 jvm就给你扔异常 其实原则上也么啥子问题 只不过人家这么规定了 你就老老实实实现这个接口撒 我记得以前老师再三说 Cloneable只是一个标记接口 它不提供任何方法 也就是他不做啥事 他只是个身份的象征 呵呵 有证好办事哇
caibird1024
2011-06-30
打赏
举报
回复
自己有理解了一下protected的,有点意思
sunyiz
2011-06-30
打赏
举报
回复
想用 clone() 方法
必须自己实现,
即在你自己的类中重写 clone() 方法,并声明为 public
这样才能在外部调用
最后,别忘了实现 Cloneable 接口
Object
的子
类
为什么
不能
调用
clone
()
Object
是所有
类
的父
类
,而
Object
中实现了
clone
()
方法
。那么为什么子
类
中
不能
调用
呢。 这个原因就在于
clone
()是一个protect
方法
。因为protect
方法
只能在当前包或者子
类
中
调用
。而
不能
通过子
类
的
实例
调用
。如果能通过子
类
的
实例
来
调用
的话,那和puplic还有什么区别呢。 ...
Object
类
的
clone
方法
Object
类
的
clone
方法
Object
是所有
类
的基
类
,当你没有显示extends一个父
类
时,编译期会自动为你加上一个
Object
类
。 这是一个native
方法
,说明这个
方法
的实现不是在java中,而是由C/C++实现,并编译成.dll文件,由java
调用
。registerNatives主要是将C/C++的
方法
映射到java中的native
方法
,实现
方法
命名的解耦。了解即可,知道是注册,细...
Java中
Object
类
之
clone
()
方法
详解
一、
clone
()
方法
clone
意思是克隆、复制。在Java语言中,当对象
调用
clone
()
方法
时,就会复制已有的对象。
clone
()
方法
在根
类
Object
中定义如下。 /** * Class
Object
is the root of the class hierarchy. Every class has
Object
as a superclass. * Al...
java实现简单的克隆(
调用
Object
的
clone
方法
和浅拷贝,深拷贝)
的
clone
方法
是protected修饰需要在克隆
类
中重写2:编译时异常/受查异常3:向下转型时需要强制
类
型转换4:克隆
类
需要设置标记接口。
Java基础知识&工具用法
总体描述
clone
()
方法
是Java
Object
对象的protected
方法
,可供子
类
调用
以实现子
类
的克隆逻辑,但
不能
直接
调用
;
clone
()
方法
是jdk的native实现,实现了对象的按位拷贝,
Object
对象只能实现对象的浅层复制,即克隆出的对象中若存在引用对象,则原对象和克隆对象中的引用对象指向同一块存储地址,若改变应用对象内的属性(注意不是改变应用对象的引用本身),则克隆对象和被克隆对象会被同时修改;若要实现对象的深层复制,则在
调用
Object
的
clone
()完成浅层复制后,还需要依次处理克
Java SE
62,614
社区成员
307,326
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章