我有这段代码:
class A{}
class B extends A{}
class C extends B{}
class D{
public void m(B b){
System.out.println("A");
}
public void m(Object o){
System.out.println("B");
}
public void m(String s){
System.out.println("C");
}
public static void main(String args[]){
D x = new D();
x.m(null);
}
}
我知道这会产生编译错误。编译器在结果中混淆了#34; A"和" C"。为什么null从B类和String扩展? 击>
更新
为什么null从B类和String扩展?
是一个非常愚蠢的问题。我应该知道,null正在寻找对象,字符串和 B 中最适用的方法是重载方法。虽然Object是所有类的超类,但最适用的方法是B或String.But这变得不明确,因为类B和String被认为是同一级别。
答案 0 :(得分:1)
编译器很困惑,因为你有三个https
方法,并且它们都可以接受空引用。你需要通过将null转换为所需的参数来明确告诉你要调用哪个m()
,如m()