Согласно вашему коду, вы должны передавать объект Animal в метод get_dog, а не объект Dog.То, что вы пробовали, называется апкастингом.Ссылочная переменная класса Parent ссылается на объект класса Child, как показано ниже.
Animal a_animal = new Dog();
![enter image description here](https://i.stack.imgur.com/Y14MB.png)
Я переписал вам код дляпонять концепцию, как показано ниже
public class Animal {
void run() {
System.out.println("An animal is running");
}
}
public class Dog extends Animal {
void run() {
System.out.println("Dog is running in 20kmph");
}
}
public class Run{
public static void main(String[] args) {
Animal a_animal = new Dog(); //Creating a reference variable of Animal class by referring to Dog class (upcasting)
a_animal.run();//
}
}
Ниже приведен результат
![enter image description here](https://i.stack.imgur.com/4e5lP.png)
Пояснение
Мы вызываем метод run по ссылочной переменной класса Parent.Поскольку он ссылается на объект подкласса, а метод подкласса переопределяет метод родительского класса, метод подкласса вызывается во время выполнения.
Вызов метода определяется JVM, а не компилятором, он известен как полиморфизм времени выполнения.