今天在我的计算机科学课上展示了这段代码(伴随着几个与这篇文章无关的问题)。这不是作业,只是我个人在代码中发现的一些问题;
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 ) {
为什么需要这个?这是incaseElement
不延长Cloneable
吗?