public Employee clone() throws CloneNotSupportedException
{
// call Object.clone()
Employee cloned = (Employee)super.clone();
// clone mutable fields
cloned.hireDay = (Date)hireDay.clone();
return cloned;
}如此句 是用的Employee clone 而有的例子我见到是 Object clone ,难道子类和父类都可以?
还有就是浅clone和深度clone到底差别在哪?怎样使非基本变量的变量clone?
请教各位大神
{
// call Object.clone()
Employee cloned = (Employee)super.clone();
// clone mutable fields
cloned.hireDay = (Date)hireDay.clone();
return cloned;
}如此句 是用的Employee clone 而有的例子我见到是 Object clone ,难道子类和父类都可以?
还有就是浅clone和深度clone到底差别在哪?怎样使非基本变量的变量clone?
请教各位大神
看看这个吧 看完这个 你应该就差不多理解了
也就是如果a是b的浅clone对象,那么你修改a之内的对象的引用,就会造成b的变化,因为他们都指向同一个对象。深clone就是彻彻底底的做了一个新对象,a,b完全独立。
这个例子讲的这么详细,怎么会不懂?你哪里感到不解啊
int i;
A a = new A();//假设此时a指向的内存地址为@8888
}如果浅clone B,clone了一个对象b。那么b.A指向的地址还是@8888
如果是深clone,那么b.A会是一个新地址
还要调用当前引用的clone()class A{
int m;
}class B{
int i;
A a = new A();
public Object clone() {
B obj = null;
try {
obj = (B)super.clone();
} catch(CloneNotSupportedException e) {
e.printStackTrace();
}
// 就是这句
obj.a = (A)obj.a.clone();
return obj;
}
}
嗯 明白了 就是还得声明对变量a的clone吧
崩溃了 难道JAVA没有更好的克隆吗?直接对超级最深层克隆