Clone

浅克隆

被克隆对象的所有变量都含有与原来的对象相同的值,

而所有的对其他对象的引用仍然指向

原来的对象。换言之,浅克隆仅仅克隆所考虑的对象,而不克隆它所引用的对象。

package fun;
public class b extends a implements Cloneable {
public static void main(String[] args) throws CloneNotSupportedException {
b b=new b();
b b1=(fun.b) b.clone();//调用clone的方法,返回Object类,需要强转
b1.fun();
b.fun();
}

private void fun() {
System.out.println("123");
}
@Override//复写clone的方法
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}

深克隆

被克隆对象的所有变量都含有与原来的对象相同的值,

除去那些引用其他对象的变量。

那些

引用其他对象的变量将指向被克隆过的新对象,

而不再是原有的那些被引用的对象。

换言之,

深克隆把要克隆的对象所引用的对象都克隆了一遍。

package Test;

public class Pet implements Cloneable{
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return super.clone();
}

}
class zoo implements Cloneable{
private String name;
private Pet p=new Pet();
public zoo(String name) {
super();
this.name = name;
}
public zoo() {
super();

}
@Override
protected Object clone() throws CloneNotSupportedException {
zoo z= (zoo) this.clone();
Pet p1= (Pet) z.p.clone();
return z;
}
public static void main(String[] args) {
try {
zoo z= new zoo();
z.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

原文地址:https://www.cnblogs.com/joyous-day/p/6490963.html