0

BaseClass コンストラクターで SubClass オブジェクトのコピーを作成したいと思います。次のコードが正しく実行される必要があります。

class BaseClass{
    BaseClass() {}
    BaseClass(BaseClass base) {
        //TODO: how to implement?
    }
}

class SubClass extends BaseClass {    
   SubClass() {}
}

public class Test {
    public static void main(String[] args) {

        BaseClass sub = new SubClass();
        BaseClass subCopy = new BaseClass(sub);
        if (subCopy instanceof SubClass) {
            // need to be true
        }
    }
}

それは可能ですか?はいの場合、どうすればできますか?他に、どうすれば同様の効果を得ることができますか?

4

3 に答える 3

3

不可能です。クラス A のコンストラクターは A のインスタンスを提供しますが、これを回避する方法はありません。サブクラスを明示的にインスタンス化しないのはなぜですか?

別の可能性として、次のような静的ファクトリ メソッドが含まれる場合があります。

public static BaseClass create(BaseClass input) {
       // return BaseClass or subclass
}
于 2013-06-02T12:14:05.883 に答える
1

のオブジェクトをwhich extendsBaseClassのインスタンスにしたいようです。SubClassBaseClass

それは可能ですか?

-いいえ。それは不可能。

instanceof演算子は、左側のtrue変数が左側の変数またはクラスのIS-A条件を満たしている場合に戻ります。

それが拡張するので、IS SubClass -A 。しかし、は拡張できないため、 になることはありません。BaseClassBaseClassBaseClassSubClassSubClass

于 2013-06-02T14:46:37.317 に答える
0

あなたは逆さまのデザインを持っているようです。求めていることを実行する必要がある場合は、設計を再考する必要があります。理想的には、サブクラスのコンストラクターで、super() を呼び出して基本クラスのプロパティをコピーまたは初期化する必要があります。

于 2013-06-02T12:17:44.370 に答える