1. 程式人生 > >讀書筆記-《Effective Java》第10、11條:覆蓋toString方法與clone方法

讀書筆記-《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;
    }
}