java中对象的克隆疑问??

既然是对象的克隆了。那么为什么不能用 对象引用A=对象引用B那,
还有在重写clone方法的时候为什么调用基类的clone方法,也就是super.clone()?

Object o1=new Object();
System.out.println(o1.hasCode());//打印o1的内存地址。
Object o2=new Object();
System.out.println(o2.hasCode());//打印o2的内存地址。
可见o1和o2拥有不同的内存数据,如果你让o2=o1,那o1和o2的地址就一样了,就是一个对象了,怎么还叫克隆?
老祖宗Object类的clone方法是将一个对象的数据原封不动的复制到另一个对象中去,比如o2=o1.clone();就将o1的数据复制了一份考贝到了另一块内存中,所以o2与o1地址不一样但数据相同。
你这里的super.clone();就是调用的Object类的clone()方法,调用Object的方法不就是省得你自己写了吗。
你可能还会问Object既然有clone()方法,而所有的类都是Object类的子类,那所有的类不都有clone()方法吗,干什么还自己写?Object类虽然有clone()方法,但是访问控制符是protected而不是public,于是别的类不可见,所以你需要重写它:

@Override
public Object clone(){
Object obj=null;
try {
obj= super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return obj;
}
而且你需要将你的类实现cloneable接口,这是必须的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-11-24
很简单啊。克隆就是克隆内容和自己一样的 一个对象被。
比如有个A类
A a=new A();
首先按你说的
A aa=a;

这样不叫克隆 只是多添加了个引用 既 a 改变东西后。 aa 也跟着改变了

如果要用 A aa=(A)a.clone() 那么aa内容被改变 a 的内容是不会跟着改变的

super.clone() 是就是先把自己的父类 克隆先。 就要还是理解下。就是克隆出一个完全和自己 一样的 类。。自然要从最上层开始。克隆了。

克隆要实现Cloneable接口
相似回答