-2

私は以下のクラスを開発していました。

public class Test1 
{
    public void method(Object o)
    {
        System.out.println("Object Verion");
    }   
    public void method(String s)
    {
        System.out.println("String Version");
    }



    public static void main(String args[])
    {
        Test1 question = new Test1();
        //question.method(question);

        question.method(null);
    }

}

実行すると、出力として文字列バージョンが呼び出されます。したがって、ここで文字列はnullとして扱われ、オブジェクトバージョンを呼び出すために何を渡す必要があるかをお知らせください。よろしくお願いします。

4

1 に答える 1

4

他のすべての条件が同じであれば、最も具体的なメソッドが呼び出されます。JLSから:

15.12.2.5。最も具体的な方法の選択

複数のメンバーメソッドがアクセス可能であり、メソッド呼び出しに適用できる場合は、実行時メソッドディスパッチの記述子を提供するために1つを選択する必要があります。Javaプログラミング言語は、最も具体的な方法が選択されるという規則を使用します。

非公式の直感では、最初のメソッドによって処理された呼び出しがコンパイル時の型エラーなしで他のメソッドに渡される可能性がある場合、1つのメソッドは別のメソッドよりも具体的です。

question.method(null) StringまたはObjectオーバーロードのいずれかを意味する可能性がStringありますが、より具体的(狭い)でObjectあるため、Stringオーバーロードは呼び出されるメソッドです。

于 2012-05-05T04:45:10.100 に答える