Субстанции, разделяющие общее суперинства - PullRequest
2 голосов
/ 20 февраля 2010

У меня есть класс Super и несколько подклассов Sub1, Sub2, ...

Есть ли способ создания экземпляров объектов sub1, sub2, которые будут использовать один и тот же суперэкземпляр?

Ситуация проистекает из конфигурации внутреннего вложенного класса:

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

Но внутренние фразы слишком сильно выросли, и я чувствую себя более комфортно, когда они хранятся в отдельных файлах. Им нужно использовать один и тот же экземпляр суперполей, поэтому мой вопрос.

Ответы [ 2 ]

2 голосов
/ 20 февраля 2010

Внутренние классы реализованы с помощью суперкласса в качестве аргумента всех их конструкторов.

Так вот что вы тоже можете сделать:

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

и всякий раз, когда вы хотите создать экземпляр подкласса внутри суперкласса:

Sub1 sub = new Sub1(this);
2 голосов
/ 20 февраля 2010

Вы можете легко выделить свои внутренние классы и сделать так, чтобы каждый из них ссылался на экземпляр текущего содержащего класса. Когда вы создаете свои новые классы, вы можете передать один и тот же экземпляр обоим, а затем новые классы могут использовать средства доступа для доступа к полям содержащего класса.

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