让我们研究以下代码:
public class App {
public static class A {
public void doSmth3(long a) {
System.out.println("This is doSmth3() in A...");
}
}
public static class B extends A {
public void doSmth3(int a) {
System.out.println("This is doSmth3() in B...");
}
}
public static void test(A a) {
a.doSmth3(1);
}
public static void main(String[] args) {
test(new B());
new B().doSmth3(3);
}
}
输出:
This is doSmth3() in A...
This is doSmth3() in B...
从我的角度来看,主要的2行应该提供相同的结果,但结果不同。
我的观点
This is doSmth3() in A...
应该输出twise,因为它过载。请说明输出
最佳答案
简单:当Java编译器在a.doSmth3(1)
中看到对test(A)
的调用时,它只能将其编译为对A#doSmth3(long)
的调用,这是唯一可用的方法。请注意,B#doSmth3(int)
是A#doSmth3(long)
的重载,而不是替代。