Если вы посмотрите на декомпилированную версию файла класса
class X {
Y b;
X() {
b = new Y();
System.out.print("X");
}
}
class Y {
Y() {
System.out.print("Y");
}
}
public class Z extends X {
Y y;
Z() {
y = new Y();
System.out.print("Z");
}
public static void main(String args[]) {
new Z();
}
}
Вы можете обнаружить, что переменная экземпляра y
перемещается внутри конструктора, поэтому последовательность выполнения выглядит следующим образом
Z
X
X
new Y()
. new Y()
Y
Все переменные экземпляра инициализируются с помощью инструкций конструктора.