讀書筆記-《Effective Java》第10、11條:覆蓋toString方法與clone方法
阿新 • • 發佈:2018-12-29
第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; } }