引子:大家可以思考一下下面程序的输出结果
public classTestNull {public voidshow(String a){
System.out.println("String");
}public voidshow(Object o){
System.out.println("Object");
}public static voidmain(String args[]){
TestMain t= newTestMain();
t.show(null);
}
}
运行的结果是:
String
解释(主要是重载函数调用时精确性的问题):
《java解惑》这本书谜题46解释了这种情况。下面内容摘自《Java解惑》
谜题46:令人混淆的构造器案例
本谜题呈现给你了两个容易令人混淆的构造器。main方法调用了一个构造器,但是它调用的到底是哪一个呢?该程序的输出取决于这个问题的答案。那么它到底会打印出什么呢?甚至它是否是合法的呢?
public classConfusing {privateConfusing(Object o) {
System.out.println("Object");
}private Confusing(double[] dArray) {
System.out.println("double array");
}public static voidmain(String[] args) {new Confusing(null);
}