Я изучаю CS, и у нас есть вопросы о полиморфизме, которые я не могу обмануть. Вот пример:
public class AA{
public AA(){
foo();
}
private void foo() {
System.out.print("AA::foo ");
goo();
}
public void goo(){
System.out.print("AA::goo ");
}
}
public class BB extends AA{
public BB(){
foo();
}
public void foo(){
System.out.print("BB:foo ");
}
public void goo(){
System.out.print("BB::goo ");
}
public static void main(String[] args){
// Code goes here
}
}
Когда в void main я добавляю строку:
AA a = new BB();
сначала идет AA-конструктор AA: foo, но затем goo() отправляет его в BB goo, почему так?
Простой полиморфизм, такой как "Animal → cat/spider/dog", легко понять, но когда дело доходит до этого, я просто потерялся. Можете ли вы, ребята, дать мне какие-нибудь советы, как читать этот код? Каковы правила?
EDIT: нет аннотации @Override
потому что это вопрос с экзамена.