浅克隆:
import com.sun.jndi.cosnaming.IiopUrl;
class Address{
}
public class Customer implements Cloneable {
private Address address =null;
public Customer(){
this.address=new Address();
}
public Object clone(){
Object obj =null;
try{
obj=super.clone();
}catch (Exception e){
System.out.println("clone failure");
}
return obj;
}
}
深克隆:
class customer implements Serializable{
private Address address =null;
public customer(){
this.address= new Address();
}
public Object deepClone() throws Exception{
ByteArrayOutputStream bao =new ByteArrayOutputStream();
ObjectOutputStream os =new ObjectOutputStream(bao);
os.writeObject(this);
ByteArrayInputStream bis =new ByteArrayInputStream(bao.toByteArray());
ObjectInputStream ois =new ObjectInputStream(bis);
return (ois.readObject());
}
}
实验结果分析
浅克隆中,Object类充当抽象原型类,Customer类充当具体原型类,浅克隆只复制容器对象,不复制成员对象。
深克隆,Customer和Address实现了Serializable接口,深克隆既要复制容器对象,又要复制成员对象。