普通类实例为什么不能直接调用Object的clone方法

caibird1024 2011-06-30 11:51:09
rt
...全文
665 10 打赏 收藏 转发到动态 举报
写回复
用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 接口

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧