我有一个Java类,其中有两个参数化构造函数
public class TestApplication {
TestApplication(Object o)
{
System.out.println("Object");
}
TestApplication(double[] darray)
{
System.out.println("Array");
}
public static void main(String[] args)
{
new TestApplication(null);
}
}
当我运行这个程序时,我输出为" Array"。为什么Object构造函数不运行?
答案 0 :(得分:3)
构造函数重载分辨率的行为与方法重载分辨率相同。当两个构造函数匹配传递的参数时,将选择具有更具体参数类型的构造函数。
null
可以同时分配给double[]
和Object
,因为两者都是引用类型,但数组是比Object
更具体的类型(因为数组)是Object
类的子类,因此new TestApplication(null)
会触发TestApplication(double[] darray)
构造函数。