问题描述
- 关于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");
}
如果你加再加这么一个方法,编译就会报错,因为编译器不知道到底去调用哪个方法。
时间: 2024-12-22 15:23:49