📜  Java函数/构造函数重载之谜

📅  最后修改于: 2022-05-13 01:55:47.542000             🧑  作者: Mango

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) 不太具体。 (每个双精度数组都是一个对象,但不是每个对象都是一个双精度数组。)