为什么打印“a(String)”?
public class Test{
public static void main(String[] args){
a(null);
}
public static void a(Object x){
System.out.println("a(Object)");
}
public static void a(String x){
System.out.println("a(String)");
}
public static void a(int x){
System.out.println("a(int)");
}
public static void a(){
System.out.println("a()");
}
}
Java版:
java version "1.7.0_04-ea"
Java(TM) SE Runtime Environment (build 1.7.0_04-ea-b228)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b12, mixed mode)
答案 0 :(得分:2)
因为规则是选择最具体的方法而String继承自Object。
如果在其中一个方法中确定了几种适用的方法 适用性测试的三个阶段,然后是最具体的一个阶段 选择
答案 1 :(得分:1)
如果重载方法编译器使用最具体的参数调用该方法。由于java.lang.String
比java.lang.Object
编译器调用更强特定类,所以使用字符串作为参数的方法。
来自Java language Specification:
如果在其中一个方法中确定了几种适用的方法 适用性测试的三个阶段,然后是最具体的一个阶段 选择