【发布时间】:2013-05-17 07:27:46
【问题描述】:
我知道使用这种克隆机制不是一个好主意(因为它像一些作者所说的那样被“破坏”了),尽管我需要帮助来理解它是如何工作的。我们得到以下类层次结构:
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