Расширение внутренних классов в Java

public class Questions {
    public static void main(String[] args) {

        D d = new D();
    }
}

class A {
    A() {
        System.out.println("A");
    }
}

class B extends A {
    B() {
        System.out.println("B");
    }

    class C {
        C() {
            System.out.println("C");
        }
    }
}

class D extends B.C {
    D() {//compilation error
        System.out.println("D");
    }
}

Это показывает ошибку при создании D, что некоторые промежуточные конструктора вызова. Скажите, пожалуйста, как мне расширить такие внутренние классы и что не так с этим кодом. Спасибо.

2 ответа

Вы должны сделать класс C статическим, чтобы к нему можно было получить доступ извне B.

class B extends A {

B () {
    System.out.println("B");
}

static class C {

    C () {
        System.out.println("C");
    }
}
}

Помимо теоретического вопроса, зачем вы это делаете?

Все нестатические внутренние классы должны иметь ссылку на экземпляр своего внешнего класса. Если вы хотите расширить такой класс, вам нужно убедиться, что у объекта, который будет использоваться в качестве базы, будет экземпляр его внешнего объекта. Так что вы можете сделать что-то вроде этого:

class D extends B.C {
    D(B b) {
        b.super();
        System.out.println("D");
    }
}

и использовать

D d = new D(new B());
Другие вопросы по тегам