这是我遇到的一个测试练习问题,非常感谢您帮助我理解这些概念
让 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
is Bird
, 所以Third
选择的方法是foo(Bird)
.
这是因为这里不涉及多态性;我们不会调用可能被重写的方法Bird
多变的x
,我们只是在不相关的类上调用一组重载方法中的一个,Third
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)