I持っているクラス「A」、B、C、およびDは、私は一般的なのJava実装は、スーパークラスから完全にコピー
ArrayList<A> stuff;
にこれらのいくつかの保存と言うのいくつかのサブクラスB、C、およびDは、Aとはまったく異なるデータメンバーを持っていません。それらが異なるのは、異なるオーバーライドされたメソッドによるものです。通常、これは、B、C、及びDを必要とするであろう
A obj1 = (A)new B(...)
A obj2 = (A)new C(...)
A obj3 = obj1.copy();
// (obj3 instanceof B) == true
:私のような
何か(真のサブクラスを維持しながら)、クラスAの別のインスタンスにクラスAのインスタンスをコピーできるようにしたいと思いカスタムコピーメソッドを実装するしかし、これはデータメンバーがまったく同じで、クラスが保存されるように存在するだけなので、無駄に思えます。
クラスAでコピーを実装するだけで、オブジェクトの基本クラスを保持する方法はありますか?
編集:私は「新しい」呼び出すとき
class A {
int dataMember;
public A copy() {
A ret = new A(); // !!
ret.dataMember = dataMember;
return ret;
}
}
:私が正しく考えている場合は
、問題は、私はちょうどスーパーコピーメソッドを持っていた場合に実行しますクラスのどのサブクラスであるかを総称的に判断できず、さらにそのインスタンスを明示的にインスタンス化することはできませんでした。または、これを行う方法はありますか?
なぜスーパークラスにコピー方法を与えるだけではないのですか? –
返事ありがとうございます。編集を参照してください – cemulate