2013-09-27 5 views
7

出力されたときにオーバーライドされたメソッドにnullを渡す:B方法の違いは、パラメータのサブタイプ

なぜ仮想マシン呼び出し、このメソッドf(null){System.out.println("B");}していますか?

なぜf(null){System.out.println("A");}

public class Test{ 

    public static class A {} 
    public static class B extends A {} 

    public void f(A a) {System.out.println("A");} 
    public void f(B a) {System.out.println("B");} 

    public static void main(String[] args) { 
     new Test().f(null); 
    } 
} 
+0

フォーマットを確認してください...明確ではありません – kTiwari

+0

もう一度仕様を掘り起こす必要があるようです... – vikingsteve

答えて

6

最も特定のパラメータタイプのメソッドが呼び出されます。これは、複数のメンバメソッドがアクセス可能で、メソッド呼び出しに適用の両方である場合、実行時のメソッドディスパッチのための記述を提供するために、いずれかを選択する必要があるJLS section 15.12.2.5

からあるルール は厥。 Javaプログラミング言語は、最も具体的な方法が選択されるという規則を使用します。

関連する問題