9

次のプログラムの出力を理解できません。

public class Confusing {

    private Confusing(Object o) {
        System.out.println("Object");
    }

    private Confusing(double[] dArray) {
        System.out.println("double array");
    }

    public static void main(String[] args) {
        new Confusing(null);
    }
}

正しい出力は「double array」です。どちらもnullを受け入れることができるのに、なぜこのコンストラクターが他のコンストラクターよりも具体的に選ばれたのですか?

4

2 に答える 2

17

どちらのコンストラクターも を受け入れることができますがnull、からdouble[] 継承するjava.lang.Objectため、より具体的になります。

于 2012-08-21T14:41:47.440 に答える
1

動的型付け言語をコンパイルする際の課題は、プログラムのコンパイル後に、メソッドまたは関数の最も適切な実装を選択できるランタイムシステムを実装する方法です。すべての変数をオブジェクトタイプのオブジェクトとして扱うと、効率的に機能しません。

したがって、特定のものを選択しObjectます。

于 2012-08-21T14:44:32.740 に答える