-2
     public class Test {

   public void method(String param)
   {
       System.out.println("String version");
   }

   public void method(StringBuffer param)
   {
       System.out.println("String Buffer");
   }

   public static void main(String args[])
   {
       Test test=new Test();
       test.method(null);
   }
}

このコードの結果は、「メソッドへの参照があいまいです」というコンパイル エラーです。</p>

    public class Test
{
    public void method1(Object param)
    {
        System.out.println("Object Version ");
    }

    public void method1(String param)
    {
        System.out.println("String Version ");
    }

    public static void main(String[] args)
    {
        Test test=new Test();
        test.method1(null);
    }
}

このコードの結果は「文字列バージョン」です</p>

実際には、2 番目のコードの結果を理解できません。両方のコードが同じ結果にならないのはなぜですか

4

1 に答える 1

2

最初のケースでは、

null他のすべての参照型のサブタイプです。したがって、コンパイラは、呼び出すメソッドを決定する際にあいまいさを見つけます..

null2 番目のケースでは、たまたま String である、より具体的なオブジェクトを見つけます。したがって、呼び出しmethod1て印刷しますString Version

于 2013-08-10T13:24:53.637 に答える