Cloneable接口是一个空接口,仅用于标记对象,Cloneable接口里面是没有clone()方法,的clone()方法是Object类里面的方法!默认实现是一个Native方法
protected native Object clone() throws CloneNotSupportedException;
如果对象implement Cloneable接口的话,需要覆盖clone方法(因为Object类的clone方法是protected,需要覆盖为public)
public Object clone() throws CloneNotSupportedException{
return super.clone();
}
Object类里的clone()方法仅仅用于浅拷贝(拷贝基本成员属性,对于引用类型仅返回指向改地址的引用)
深拷贝需要重新覆盖Clone方法。
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();
}
}
利用Serializable来实现深层复制
利用Serializable进行深拷贝的时候成员属性也必须是Serializable的,否则只返回一个引用,具体参考本人的博客: