我无法理解以下程序的输出。
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时,这个构造函数被选择为比另一个更具体吗?
答案 0 :(得分:17)
即使两个构造函数都可以接受null
,double[]
从java.lang.Object
继承,因此更具体。
答案 1 :(得分:1)
编译动态类型语言的挑战是如何实现一个运行时系统,该系统可以选择最合适的方法或函数实现 - 在编译程序之后。将所有变量视为对象类型的对象将无法有效工作。
因此,选择Object
以上的特定版本。