首先展示一段代码
import java.util.*;
public class FourtySixth{
private FourtySixth(Object o){
System.out.println("Object");
}
private FourtySixth(double[] d){
System.out.println("array");
}
public static void main(String[] args){
new FourtySixth(null);
}
}
打印什么?array吗?
是的,就是array!!!
分析下重载阶段的解析过程
1、选择所有可以获得并且可以应用的方法或构造器。
2、在第一阶段选择的方法或构造器中选择最精却的一个。
何为最精却?跟实参有关吗?最精却的定义:如果一个方法或构造器可以接受传递给另一个方法或构造器的任何参数,那么就说第一个没有第二个精确!
理解了最精却的概念,返回来看这段代码,很显然,可以接手Object参会就可以接受double[],所以第二个构造器更精确!
延伸:
看下面代码:
import java.util.*;
public class FourtySixth{
private FourtySixth(Object o){
System.out.println("Object");
}
private FourtySixth(double[] d){
System.out.println("array");
short s = 1;
fun(1);
}
public static void main(String[] args){
new FourtySixth(null);
}
public static void fun(int a){
System.out.println("int");
}
public static void fun(Short a){
System.out.println("Short");
}
}
array
int