12

重複の可能性:
null を渡すときにどのコンストラクターが選択されますか?

私は最近、数日前にコーディング中にこの好奇心に出くわしましたが、次のことが起こる理由を理解できないようです:

以下のクラスを考えると

public class RandomObject{
    public RandomObject(Object o){
        System.out.println(1);
    }
    public RandomObject(String[] s){ 
        System.out.println(2);
    }
}

呼び出しが行われると、コンストラクターが作成された順序に関係なく、new RandomObject(null);常に出力が行われます。オブジェクトではなく文字列配列を参照するのは2なぜですか?null

4

2 に答える 2

14

ここで重要なのは、Object が String[] のスーパー タイプであることです。

Java は、利用可能な最も具体的な方法を使用して、このようなケースを解決します。コンパイル エラーなしで両方のメソッドに null を渡すことができるため、Java はここで最も具体的なメソッドを見つける必要があります。String[] を含むバージョンはより具体的であるため、実行用に選択されます。

于 2013-01-25T05:00:55.970 に答える
6

他の誰かが以前にこの質問をしたことがあります。この投稿を確認してください

選択するケースが 2 つある場合、コンパイラはまず、より具体的なケースを選択しようとします。この場合、String が Object よりも優先されます。

他の質問では、String str代わりにString[] s

したがって、String[]はそのスーパー タイプよりも具体的なデータ型Objectであるため、選択されます。

于 2013-01-25T04:59:17.073 に答える