Java 共享一个公共高级实例的子实例

Java 共享一个公共高级实例的子实例,java,subclass,inner-classes,Java,Subclass,Inner Classes,我有一个超类和几个子类Sub1,Sub2 有没有方法实例化共享同一超级实例的对象sub1、sub2 这种情况来自内部嵌套类配置,如下所示: Super{ superFields... Sub1{...} Sub2{...} ........ } 但是内部类别增长太多了,如果将它们放在单独的文件中,我会觉得更舒服。它们需要共享同一个Superfeld实例,所以我的问题是。您可以轻松地划分出内部类,并让每个类引用当前包含类的实例。构造新类时,可以将同一实

我有一个超类和几个子类Sub1,Sub2

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

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

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

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

您可以轻松地划分出内部类,并让每个类引用当前包含类的实例。构造新类时,可以将同一实例传递给这两个类,然后新类可以使用访问器获取包含类的字段

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());
    }
}

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

所以你也可以这么做:

public class Sub1 {
   private Superclass superclass;
   public Sub1(Superclass superclass) {
       this.superclass = superclass;
   }
}
当您想从超类中实例化子类时:

Sub1 sub = new Sub1(this);

我明白了,你是说用作文。我更喜欢直接访问父成员——就像在嵌套类配置中一样——因为要访问的成员很多,不想让代码太混乱。但我很惊讶继承不可能实现这一点,所以我必须在当前嵌套类aproach或您提到的组合类之间进行选择。谢谢你,真聪明!我必须复制每个子类中的所有父成员,但代码会更干净,因为我不必到处使用ACCESOR。所以这实际上是一个分解的内部类!!。我不知道。Thanks@pepin-如果其中一个答案适合您,则您应将其标记为已接受(投票计数器下方的勾号)