请解释为什么我得到"方法与字符串参数"在输出中。 当我从显示(测试x)方法中删除注释时,它表示"显示参考不明确"。
class Test
{
int a;
int b;
}
public class TestIt
{
public static void display(String x)
{
System.out.println("Method with String param");
}
public static void display(Object x)
{
System.out.println("Method with Object param");
}
/*
public static void display(Test x)
{
System.out.println("Method with Test param");
}
*/
public static void main(String args[])
{
display(null);
}
}
答案 0 :(得分:1)
因为null
是Object
和String
的有效值。你可以施展,
display((String) null);
将输出
Method with String param
或
display((Object) null);
的
Method with Object param
答案 1 :(得分:1)
因为在确定要调用哪个方法时,编译器会选择匹配参数的最具体的方法。 display(String)
和display(Object)
都匹配对display(null)
的调用,但display(String)
更具体而不是display(Object)
,因此编译器会使用。但是,当您取消注释display(Test)
版本时,编译器无法做出选择,因为display(String)
和display(Test)
同样具体。
有关所有血腥的详细信息,请参阅§15.12 of the JLS。