2

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

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

这种情况来自这样的内部嵌套类配置:

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

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

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 回答