在本例中,为什么java更喜欢父类?
因此,在课堂上,我们会过度加载和删除,但出于某种原因,我的教授无法解释为什么当我们有两个类(a和b;以及b扩展到a)时,调用一个方法时,它会优先选择父类中的方法,即使参数满足子类的参数。但是java使用父级在本例中,为什么java更喜欢父类?,java,Java,因此,在课堂上,我们会过度加载和删除,但出于某种原因,我的教授无法解释为什么当我们有两个类(a和b;以及b扩展到a)时,调用一个方法时,它会优先选择父类中的方法,即使参数满足子类的参数。但是java使用父级 class B extends A { public int m(int x) { return 20; } } class A { public int m(double x) { return 10; } } public class Tester {
class B extends A {
public int m(int x) {
return 20;
}
}
class A {
public int m(double x) {
return 10;
}
}
public class Tester {
public static void main(String[] args) {
A x = new B();
System.out.println(x.m(5));
}
}
输出:10它们不是相同的方法。它们有不同的参数类型。将
@Override
添加到a
。您确定输出为10吗?@JoopEggen,这没关系。仅用于编译器的注释!链接复制的tldr:由于两个m
方法不相关,编译器在编译时只知道a
的方法——也就是说,它只知道m(double)
。因此,它将方法解析为该调用,并且在运行时没有考虑到存在一个更适合的方法这一事实,因为该更适合的方法不是重载的m(double)
(因为int不是double的子类型)。