【发布时间】:2020-04-07 17:19:52
【问题描述】:
public class Main {
static void method(A a){
System.out.print("one");
}
static void method(B b){
System.out.print("two");
}
static void method(Object obj){
System.out.print("three");
}
public static void main(String[] args) {
C c = new C();
method(c);
}
}
class A {}
class B extends A{}
class C extends B{}
正如您看到的标题,我认为它显示“三”,但真正的答案是“二”。任何人都可以解释我吗?谢谢!
【问题讨论】:
-
为什么不自己跑debug呢?
-
重载将解析为适用于参数的最具体的类型。适用于类型 C 的引用的最具体的类型是 B。
-
我想学习java的顺序。我找不到相关教程,所有教程都显示2+2 = 4。
-
@khelwood 所以,它去最接近的类来引用,从下到上。不是吗?
-
@EmreKÖK 这取决于您在这种情况下所说的“底部”和“顶部”是什么意思。如果您的意思是继承层次结构的最底层,超类在子类之上,那么是的。
标签: java inheritance methods static overload-resolution