关于null的一段测试程序

public class testDriver {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    testDriver td = new testDriver();
    td.test(null);

}

public void test(Object o){
    System.out.println("object");
}
public void test(String s){
    System.out.println("String");
}

}
上面这段代码运行给过为何为“String”?我理解object是String的父类级别的,并且null也表示空引用,所以td.test(null)调用结果应该是“object”才对。

因为String是Object的子类,所以在编译器调用的时候会先去调用子类。所以结果就是String
一般都是会优先子类的。是一个之下而上的过程。
我刚刚测试了一下我的猜想
public static void test(Integer o){
System.out.println("int");
}
如果你加再加这么一个方法,编译就会报错,因为编译器不知道到底去调用哪个方法。