このコードは、今日のコンピューター サイエンスのクラスで提示されました (この記事と関係のない質問がいくつかあります)。これは宿題ではなく、私が個人的にコードで見つけたいくつかの問題です。
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
ですか?