2

クラス Super といくつかのサブクラス Sub1、Sub2、...

同じスーパー インスタンスを共有するオブジェクト sub1、sub2 をインスタンス化する方法はありますか?

この状況は、次のような内部のネストされたクラス構成から発生します。

Super{  
    superFields...
    Sub1{...}
    Sub2{...}
    ........
    }

しかし、内部のクラスが大きくなりすぎたので、別のファイルに分けた方が快適だと思います。彼らはスーパーフィールドの同じインスタンスを共有する必要があるので、私の質問です.

4

2 に答える 2

2

内部クラスを簡単に分割して、それぞれが現在含まれているクラスのインスタンスを参照するようにすることができます。新しいクラスを構築するときに、同じインスタンスを両方に渡すことができます。その後、新しいクラスはアクセサーを使用して、含まれているクラスのフィールドを取得できます。

class Super {
    String fieldA;
    int fieldB;
    ...
}

新しいファイルでは、次のようになります。

class Sub1{
    Super myOldContainingClass;
    Sub1(Super myOldContainingClass) {
        this.myOldContainingClass = myOldContainingClass;
    }

    void myMethod() {
        System.out.println(myOldContainingClass.getFieldA());
        System.out.println(myOldContainingClass.getFieldB());
    }
}
于 2010-02-20T10:38:49.517 に答える
2

内部クラスは、すべてのコンストラクターの引数としてスーパークラスを持つことによって実装されます。

それがあなたにもできることです:

public class Sub1 {
   private Superclass superclass;
   public Sub1(Superclass superclass) {
       this.superclass = superclass;
   }
}

スーパークラス内からサブクラスをインスタンス化したいときはいつでも:

Sub1 sub = new Sub1(this);
于 2010-02-20T10:39:21.670 に答える