clone方法:
在Object类中,clone方法被声明为protected,因此无法调用T.clone() ,T为任意对象。
必须重新定义clone方法,将它声明为public,并实现Cloneable接口。
Cloneable接口是一个标记接口,并没有任何方法,唯一的目的就是可疑用instanceof进行类型检查。
浅拷贝:
深拷贝:默认的克隆操作,它并没有克隆对象中的对象。
对于对象中的可变对象,使用浅拷贝只会拷贝对象引用,导致对象引用与它的拷贝引用同一个对象。
class Person implements Cloneable { public Person clone() throws CloneNotSupportedException { return (Person) super.clone(); } }
必须克隆对象中的所有可变对象。
class Person implements Cloneable { Dog dog; public Person clone() throws CloneNotSupportedException { Person cloned = (Person) super.clone(); cloned.dog = dog.clone(); return cloned; } }