【发布时间】:2017-06-06 05:38:31
【问题描述】:
让我们来看看这个简单的 Java 代码:
public class Animal {
public void eat() {
System.out.println("Generic Animal Eating Generically");
}
}
public class Horse extends Animal {
public void eat() {
System.out.println("Horse eating hay ");
}
public void eat(String s) {
System.out.println("Horse eating " + s);
}
}
我正在尝试找出三个eat() 方法的哪个版本将运行。现在,当我输入时
Animal a = new Animal();
a.eat();
输出是“Generic Animal Eating Generically”,完全可以理解。
当我输入时也会发生同样的事情:
Horse h = new Horse();
h.eat();
输出是“马吃干草”,这也是完全合乎逻辑的。
这就是让我感到困惑的地方。当我输入时:
Animal ah = new Horse();
ah.eat();
我明白了:
Horse eating hay
我希望编译器从 Animal 类引用而不是 Horse 对象引用调用eat() 方法。
所以我的问题是,当我有一个泛型引用变量时,我如何才能确定编译器将调用哪个方法 引用对象类型的类型(例如:Animal horse = new Horse();
【问题讨论】:
标签: java polymorphism overloading overriding