Consider this:
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();
}
}
Why does it print?
Animal's constructor called
I'm Human (??? I didn't expect this)
Exit Animal's constructor
Human's constructor called
I'm an Animal
Exit Human's constructor
And not:
Animal's constructor called
I'm an Animal
Exit Animal's constructor
Human's constructor called
I'm an Animal
If anyone can give a detailed explanation of this behavior, I will be very grateful. Please don't tell me redundant answers like "is a Polymorphic java behaviour". Thank in advance