读书笔记-《Effective Java》第10、11条:覆盖toString方法与clone方法

第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;
    }
}

猜你喜欢

转载自blog.csdn.net/baitianmingdebai/article/details/85261093
今日推荐