これは、私のプロジェクトで直面した技術的な問題のために提起されました。
問題: サード パーティのライブラリ クラス (コンテンツを変更するアクセス権がない) からプロパティ (継承) を拡張したクラスのオブジェクトを複製する必要があります。
以下の例で説明しましょう。
親クラス:
public class UnChangeableBaseClass {
//fields and Methods
}
子クラス:
class DerivedLocalClass extends UnChangeableBaseClass implements Cloneable {
// local fields and methods
public Object clone(){
Object clonedObj= null;
try{
clonedObj = super.clone();
}
catch(CloneNotSupportedException e){
//log exceptions
}
}
}
これを実行しようとすると、super.clone()
メソッドは Class - UnChangeableBaseClass
Type を参照し、メソッドをオーバーライドしませんObject clone()
。私は、すべてのクラスが で拡張されていると信じています。メソッドはjava.lang.Object class
暗黙的protected Object clone()
にこの親クラスに継承されます。だから、派生クラスのこのメソッドが親/オブジェクトのクローンメソッドをオーバーライドするような方法で考えました。ただし、ランタイム JVM では、で明示的に定義された clone メソッドを検索しますUnChangeableBaseClass
。混乱することなく適切に説明していただければ幸いです。
私の質問は次のとおりです。
親クラスにメソッドを追加してsuper.clone()
Object clone メソッドを呼び出さなければならない、この典型的なケースで clone メソッドを実装するにはどうすればよいですか。上記のケースが不可能な場合、派生クラス
オブジェクトを複製する他の方法はありますか (上記のシナリオのすべての制限を考慮して)最後に、この JVM の動作の理由 (上記で説明) を知りたいだけです。