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);
    }
}

正确的输出是“双数组”。当两者都可以接受 null 时,为什么选择这个构造函数比另一个更具体?

4

2 回答 2

17

尽管两个构造函数都可以接受nulldouble[] 继承java.lang.Object,因此更具体。

于 2012-08-21T14:41:47.440 回答
1

编译动态类型语言的挑战是如何实现一个运行时系统,该系统可以选择最合适的方法或函数实现——在程序被编译之后。将所有变量都视为 Object 类型的对象不会有效地工作。

因此,选择特定的Object

于 2012-08-21T14:44:32.740 回答