如果我将子类强制转换为其超类,并调用在子类中重写的方法,它是否执行重写或原始方法?

use*_*893 4 java oop inheritance casting

考虑:

Dog是一个子类Animal,并Dog覆盖Animal.eat()

Animal[] animals = getAllAnimals();
for (int i = 0; i < animals.length; i++) {
    animals[i].eat();
}
Run Code Online (Sandbox Code Playgroud)

如果Animal.eat()被覆盖Dog.eat(),则从类型Animal(animals[i]?)的标识符调用方法时调用哪一个

Ted*_*opp 9

将调用子类方法.这就是多态的美.

  • 了解c ++对非动态方法的操作方式不同.不要"假设java适用于所有地方 (3认同)
  • 作为编程语言的书呆子,我会说这是动态调度的美妙之处.请记住,除了在OO语言中找到的子类型多态性之外,还有其他类型的多态性. (2认同)