【发布时间】:2013-04-15 04:27:59
【问题描述】:
今天我在计算机科学课上展示了这段代码(附带几个与这篇文章无关的问题)。这不是功课,只是我个人在代码中发现的一些问题;
public class CloneClass implements Cloneable {
private Element element ;
public CloneClass ( Element newElement ) {
element = newElement ;
}
public CloneClass clone () {
try {
// I don't understand this
CloneClass copy = ( CloneClass ) super.clone ();
// or this
copy.element = element.clone ();
return copy ;
} catch ( CloneNotSupportedException e ) {
return null ;
}
}
}
首先;
CloneClass copy = ( CloneClass ) super.clone ();
我们知道 super 是 Object(因为没有显式扩展)并且 super.clone() 必须返回 CloneClass 的实例(它不能返回 Object 实例,因为那是抽象的,而且它正在向下转换到CloneClass,所以它必须是CloneClass 或后代实例)。
我的问题; super.clone() 怎么知道返回 CloneClass 实例?
其次;
copy.element = element.clone ();
怎么可能这样直接引用copy.element;它被宣布为私有的!
它不是当前类的属性,而是另一个实例的属性(恰好是同一个类)
第三;
} catch ( CloneNotSupportedException e ) {
为什么需要这个?这是 Element 不扩展 Cloneable 吗?
【问题讨论】: