public class Test{
public void myMethod(Object obj){
System.out.println("My Object");
}
public void myMethod(String str){
System.out.println("My String");
}
public static void main(String args[]){
Test t = new Test();
t.myMethod(null);
}
}
A.输出 : My Object
B.输出: My String
C.执行中断
D.Runtime
答案:
B : My String
为什么呢?
分析:
该类中有两个相同名称的方法名,大家应该都记得”重载“这个概念吧。“方法重载”有两种形式:1.返回类型不一致; 2.传入参数不一致。此题为第二种形式。
再者 null 是什么呢? null 表示一个不确定的对象,值与类型等等都未知。
将 null 传入本题中方法时,由于参数的继承关系(Object、String都是对象,String为Object子类),会将不确定对象 null 当做其子类型处理,即String
再者 :将题中的Object参数改为 Character 时,由于 Character 和 String 之间并没有继承关系。所以main 无法确定 不确定对象null 到底为哪个方法的参数,结果为: 编译不通过