Учтите это:
class Animal {
Animal(){
System.out.println("Animal's constructor called");
this.indentifyMyself();//??????????????
System.out.println("Exit Animal's constructor");
}
void indentifyMyself(){
System.out.println("I'm an Animal");
}
}
class Human extends Animal{
Human(){
System.out.println("Human's constructor called");
super.indentifyMyself();
System.out.println("Exit Human's constructor");
}
@Override
void indentifyMyself(){
System.out.println("I'm Human");
}
}
public class Main {
public static void main(String[] args) {
new Human();
}
}
Почему он печатает?
Конструктор животных под названием
Я человек (??? Я этого не ожидал)
Выход из конструктора животных
Конструктор человека по имени
Я - Животное
Выход из конструктора человека
А не:
Конструктор животных под названием
Я - Животное
Выход из конструктора животных
Конструктор человека по имени
Я - Животное
Если кто-нибудь сможет дать подробное объяснение этого поведения, я буду очень благодарен.
Пожалуйста, не говорите мне избыточные ответы, такие как «Полиморфное поведение Java».
Заранее благодарен