使用场景:复制当前类,但新类状态的改变不影响原类时
protected Object clone()[java.lang.Object]
clone在进行时只能是[b]一个字段一个字段的复制[/b]。
对于只包含不可变字段(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;
}
...
...
}
protected Object clone()[java.lang.Object]
clone在进行时只能是[b]一个字段一个字段的复制[/b]。
对于只包含不可变字段(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;
}
...
...
}