Я понимаю, что полиморфизм применяется только к нестатическим и неконечным методам класса.
Но возьмите этот пример:
class Animal{
public void play(){
System.out.println("Play animal");
}
}
public class Dog extends Animal{
public void play(){
System.out.println("Play dog");
}
public void bark(){
System.out.println("Woof");
}
public static void main(String []args){
Animal d = new Dog();
d.play(); //Outputs "Play dog"
d.bark(); //ERROR
}
}
Я понимаю, что d является объектом Dogи что каждый Dog является Animal.
Программа понимает, что d является объектом Dog, и поэтому вызывает метод play () из класса Dog, IGNORING тот факт, что он объявлен как Animal.
Но почему, по тому же принципу, программа не осознает, что d является объектом Dog, IGNORING объявление Animal?
Это то, что я пытаюсь понять.