为什么将null传递给重载方法会导致编译器错误?

时间:2015-10-26 15:36:10

标签: java overloading

我有这段代码:

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被认为是同一级别。

1 个答案:

答案 0 :(得分:1)

编译器很困惑,因为你有三个https方法,并且它们都可以接受空引用。你需要通过将null转换为所需的参数来明确告诉你要调用哪个m(),如m()