我知道使用这种克隆机制并不是一个好主意(因为它像某些作者所说的那样“破碎”),尽管我需要帮助了解它是如何工作的。我们给出的类层次结构:了解Java中的Object.clone()
class N implements Cloneable{
protected int num;
public N clone() throws CloneNotSupportedException{
return (N)super.clone();
}
}
class M extends N{
protected String str;
public M clone() throws CloneNotSupportedException{
M obj = (M)super.clone();
obj.setString(new String(this.str));
return obj;
}
void setString(String str){
this.str = str;
}
}
由于N
延伸Object
,请问super.clone()
返回N
一个实例? super.clone()
实际上是Object.clone()
,它返回对类Object
的对象的引用。为什么我们可以将它投射到N
? N
的成员num
不属于类Object
。默认行为是如何实际设法自动克隆这个变量的(因为它在类Object
中没有记录)?
此外,同样适用于M.在M.clone()
我们从铸造类N
(由super.clone()
返回)的目的是M
类的一个对象。我知道所有这些都是有效的,但我不明白为什么。
的可能重复【JAVA:克隆()操作调用超。克隆()](http://stackoverflow.com/questions/5430944/java-clone-operation-calling-super-clone) – EJP