实现 clone 方法时,为什么不能用 Object.clone() 而用 super.clone() ,super 不就是 Object 吗?

yuandejun 2008-03-26 09:10:34
实现 clone 方法时,为什么不能用 Object.clone() 而用 super.clone() ,super 不就是 Object 吗?
谢谢。
...全文
556 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
apple058 2009-03-18
  • 打赏
  • 举报
回复
我很想知道:

发表于:2008-03-26 13:17:076楼 得分:0
由于clone是object类的一个protected方法,代码中不能直接调用它。

上面意思是
Object o = new Object();
o.clone();//这里不能引用是因为,方法是 protected。

那我下面的程序为啥可以运行呢?

public class Test {
public static void main(String[] args) {
A a1 = new A();
a1.testP();//引用自己类的protected方法
}
}
class A{
protected void testP(){
System.out.println("=============");
}
}
hscgr 2008-09-08
  • 打赏
  • 举报
回复
public Employee clone() throws CloneNotSupportedException{
//call Object.clone()
Employee cloned=(Employee)super.clone();

//clone mutable fields
cloned.hireDay=(Date)hireDay.clone();

return cloned;
}
这儿为什么是 super.clone() 而不是this.clone()?这儿不应该是employee 的克隆吗?
yuandejun 2008-03-26
  • 打赏
  • 举报
回复
还是没有理解...
steven20 2008-03-26
  • 打赏
  • 举报
回复
无奈了
yuandejun 2008-03-26
  • 打赏
  • 举报
回复
super 不是指 Object ?
那么 当一个类没有 extends 其它类时,是否就隐含的 extends Object 呢?
sailyyang 2008-03-26
  • 打赏
  • 举报
回复

java中 Object 类本身不实现接口 Cloneable,所以在类为 Object 的对象上调用 clone 方法将会导致在运行时抛出异常。

bt_lose 2008-03-26
  • 打赏
  • 举报
回复
Object类对象是无法被clone的,至少当引用obj被声明为Object类的时候,你不能这么做...

因为Java中并不是所有的类都可以被克隆(而且JDK中还描述说不能保证某些类clone的结果x.clone()!=x绝对成立),所以Object类对象无法调用clone()...

还有super不是指Object而是指其父类的引用
zapdos 2008-03-26
  • 打赏
  • 举报
回复
你说的super是Object的一个实例
yuandejun 2008-03-26
  • 打赏
  • 举报
回复
是不是 super 是指 Object ?
那么 当一个类没有 extends 其它类时,是否就隐含的 extends Object 呢?
hmsuccess 2008-03-26
  • 打赏
  • 举报
回复
由于clone是object类的一个protected方法,代码中不能直接调用它
子类只能受保护的clone方法克隆他自己,为此必须重新定义clone方法,
并将其设为public,一般情况下,建议实现cloneable标记接口,并通过调用super.clone()方法

62,614

社区成员

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

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