public class Test {
public void method(String param)
{
System.out.println("String version");
}
public void method(StringBuffer param)
{
System.out.println("String Buffer");
}
public static void main(String args[])
{
Test test=new Test();
test.method(null);
}
}
此代码结果是编译错误,说“对方法的引用不明确”
public class Test
{
public void method1(Object param)
{
System.out.println("Object Version ");
}
public void method1(String param)
{
System.out.println("String Version ");
}
public static void main(String[] args)
{
Test test=new Test();
test.method1(null);
}
}
此代码结果为“String Version”
其实我无法理解第二段代码的结果。为什么两段代码都没有相同的结果
答案 0 :(得分:2)
在第一种情况下,
null
是每个其他引用类型的子类型。
因此,编译器在决定调用哪个方法时会发现歧义。
在第二种情况下,它找到null
更具体的对象,恰好是String。因此,它调用method1
并打印String Version