第六章 clone

使用场景:复制当前类,但新类状态的改变不影响原类时
protected Object clone()[java.lang.Object]
clone在进行时只能是 一个字段一个字段的复制
对于只包含不可变字段(String,primitive类型)的类, shallow clone[浅拷贝]是可行的,
但是当当前类包含指向其他类的引用时(eg. Date类型),须进行deep clone[深拷贝],因为此时,当前类和克隆的新类都包含指向同一类内存的引用类型,对当前类或克隆类的改变都会影响彼此。

在进行克隆时要考虑:
当前类是否只包含不可变的字段,是则只需重写默认的clone方法[拓展protected 为public],否则要对引用字段进行克隆
1.implements Cloneable接口
2.重写默认的clone方法【拓展protected 为public(不知作者为什么在这里特别指出非得将protected拓展为public,感觉均可)】

public class Employee implements Cloneable{
  private String name;
  private double salary;
  private Date hireDay;

public Employee clone() throws CloneNotSupportedException {
  //call Object.clone()
  Employee cloned = (Employee)super.clone();
  //cloned.hireDay = (Date) hireDay.clone();
  return cloned;
}
...
...
}

你可能感兴趣的:(clone)