复制对象 or 复制引用
覆盖Object中的clone方法, 实现深拷贝
现在为了要在clone对象时进行深拷贝, 那么就要Clonable接口,覆盖并实现clone方法,除了调用父类中的clone方法得到新的对象, 还要将该类中的引用变量也clone出来。如果只是用Object中默认的clone方法,是浅拷贝的,
如何进行彻底的深拷贝
对于上面的例子来说,怎样才能保证两个Body对象完全独立呢?只要在拷贝Head对象的时候,也将Face对象拷贝一份就可以了。这需要让Face类也实现Cloneable接口,实现clone方法,并且在在Head对象的clone方法中,拷贝它所引用的Face对象。
Cloneable接口是一个空接口,仅用于标记对象,Cloneable接口里面是没有clone()方法,的clone()方法是Object类里面的方法!默认实现是一个Native方法
public class testDeepClone implements Cloneable {
public int num = 0;
public String str = "default";
public A a;
public Object clone() throws CloneNotSupportedException {
testDeepClone o = (testDeepClone) super.clone();
o.str = new String(this.str);
o.a = (A) a.clone();
return o;
}
}
// 成员属性A必须为Cloneable的,否则无法Clone其组合的类
class A implements Cloneable {
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}