为什么使用直接超类参数而不是 Object 选择重载方法?
Why is overloaded method selected with direct superclass parameter rather than Object?
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{}
如您所见,我认为它显示的是 "three",但真正的答案是 "two"。谁能给我解释一下?谢谢!
重载将解析为适用于参数的最具体的类型。 A
、B
和 Object
都可以应用于 C
,但其中最具体的是 B
。所以 method(B)
会被调用。
如果 C
没有扩展 A
或 B
,那么将调用 method(Object)
。
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{}
如您所见,我认为它显示的是 "three",但真正的答案是 "two"。谁能给我解释一下?谢谢!
重载将解析为适用于参数的最具体的类型。 A
、B
和 Object
都可以应用于 C
,但其中最具体的是 B
。所以 method(B)
会被调用。
如果 C
没有扩展 A
或 B
,那么将调用 method(Object)
。