Расширение внутренних классов в 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());