第10条 始终要覆盖toString方法
提供合适的输出,会经常用到。
第11条 谨慎地覆盖clone
特别注意(谨慎的源头)
如果直接使用super.clone(),那么基本数据类型会复制,但是对象、数组这种类型就会只复制引用。
也就是说如果修改clone出来的对象的属性对象,那么原始的对象属性也会被修改。
@Override
protected People clone() throws CloneNotSupportedException {
People people = (People) super.clone();
return people;
}
解决的办法就是在clone方法单独在克隆一下属性。如果这个属性是自定义的类,那么就要在此类中也覆盖一下clone方法。
public class People implements Cloneable {
public People() {
strs = new String[16];
}
public String name;
public String[] strs;
public void push (String obj){
strs[1] = obj;
}
@Override
protected People clone() throws CloneNotSupportedException {
People people = (People) super.clone();
people.strs = this.strs.clone();
return people;
}
}