Что вы, вероятно, не получите, так это то, что конструктор явно не вызывает super (), тогда компилятор все равно добавляет вызов super()
в самое начало конструктора.Итак,
public SillyBird() {
System.out.println("duchess");
}
эквивалентно
public SillyBird() {
super();
System.out.println("duchess");
}
Добавьте вызовы super()
в самом начале конструкторов, у которых их нет, затем следуйте вызовам, и вынайду ответ.Например, вызов
Silly s2 = new Loony();
вызывает конструктор Loony
, который вызывает super ().Поэтому вызывается конструктор без аргументов SillyBird, который сначала вызывает super ().Таким образом, вызывается конструктор Bird без аргументов, который вызывает this(0)
.ТАК называется 1-аргументный конструктор Bird и т. Д.