Java中实现对象的Clone
1、 声明实现Cloneable接口,并重写clone方法,如果不重写该方法,则不能调用对象的clone方法。
2、 在重写的clone方法中,调用super.clone拿到一个对象,如果父类的clone实现没有问题的话,在该对象的内存存储中,所有父类定义的字段都已经clone好了,该类中的值类型字段和引用类型字段也克隆好了,只是现在的引用类型字段都是浅copy。
3、 把浅copy的引用指向原型对象新的克隆体。
public class Person implements Cloneable {
private String name;
private Integer age;
public Person(String strName, Integer iAge){
this.name = strName;
this.age = iAge;
}
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return super.clone();
}
}
public class Account implements Cloneable {
private Person person;
private Integer balance;
public Account(Person p, Integer i){
this.person = p;
this.balance = i;
}
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
Account account =(Account) super.clone();
account.person = (Person)this.person.clone();
return account;
}
}
注意点:Object.clone方式是protected(受保护的),该方法只在其子类和包内中可见。