Мне сложно переносить голову на нестатические вложенные классы в Java. Рассмотрим следующий пример, который печатает "Внутренний", а затем "Ребенок".
class Outer {
class Inner {
Inner() { System.out.println("Inner"); }
}
}
public class Child extends Outer.Inner {
Child(Outer o) {
o.super();
System.out.println("Child");
}
public static void main(String args[]) {
new Child(new Outer());
}
}
Я понимаю, что экземпляры Inner всегда должны быть связаны с Outer экземпляром, и это относится и к Child, так как он расширяет Inner. Мой вопрос в том, что означает синтаксис o.super()
- почему он вызывает конструктор Inner?
Я видел только обычный super(args)
, используемый для вызова конструктора суперкласса и super.method()
для вызова версии суперкласса переопределенного метода, но никогда не являющегося чем-то вроде формы instance.super()
.