Java函数/构造函数重载之谜
预测程序的输出
public class GFG {
private GFG(Object o) {
System.out.println("Object");
}
private GFG(double[] d) {
System.out.println("double array");
}
public static void main(String[] args) {
new GFG(null);
}
}
解决方案:
传递给构造函数的参数是空对象引用,数组也是引用类型。如果我们尝试运行该程序,我们会得到以下信息。
该程序打印double array 。
我们可以注意到编译器不会导致模棱两可的调用错误。 Java 的重载解决过程分两个阶段进行。
第一阶段选择所有可访问和适用的方法或构造函数。
第二阶段选择第一阶段选择的最具体的方法或构造函数。如果一个方法或构造函数可以接受传递给另一个的任何参数,则它的特定性低于另一个。
在我们的程序中,这两个构造函数都是可访问且适用的。构造函数 GFG(Object) 接受传递给 GFG(double[]) 的任何参数,因此 GFG(Object) 不太具体。 (每个双精度数组都是一个对象,但不是每个对象都是一个双精度数组。)