共享一个共同的超级实例的子实例

时间:2010-02-20 10:24:16

标签: java subclass inner-classes

我有一个类Super和几个子Sub1,Sub2,...

有没有办法实例化可以共享同一个超级实例的对象sub1,sub2?

情况来自内部嵌套类配置,如下所示:

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

但内心的claeses已经成长得太多,我觉得将它们放在单独的文件中会更加舒适。他们需要共享同一个superFields实例,所以我的问题。

2 个答案:

答案 0 :(得分: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());
    }
}

答案 1 :(得分:2)

通过将超类作为其所有构造函数的参数来实现内部类。

这就是你可以做的事情:

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

并且只要您想在超类中实例化子类:

Sub1 sub = new Sub1(this);