这是我遇到的一个测试练习题,希望你能帮助我理解这些概念
让 Hawk 成为 Bird 的子类。假设某个类有两个重载方法 void foo(Hawk h) 和 void foo(Bird b)。哪个版本将在调用 foo(x) 之后执行 声明 Bird x = new Hawk();
这是我到目前为止的代码,有人可以向我解释为什么 foo(bird b) 会被执行吗?
public class MPractice {
public static void main(String args[]) {
Bird x = new Hawk();
Third y = new Third();
y.foo(x);
}
}
public class Third {
void foo(Hawk h) {
System.out.println("Hawk");
}
void foo(Bird b) {
System.out.println("Bird");
}
}
最佳答案
当 Java 为选择方法执行重载决策时,它使用变量的类型而不是对象的运行时类型来选择方法。 x
的类型是Bird
,所以选择的Third
方法是foo(Bird)
。
这是因为这里不涉及多态性;我们并没有在 Bird
变量 x
上调用一个可能被覆盖的方法,我们只是在一个不相关的类上调用一组重载方法中的一个,Third
。
关于java方法重载继承与多态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23001314/