以下方法将调用哪种重载方法,为什么?
我执行了这段代码并用List调用了重载方法,但为什么会这样?
public class AmbigiousOverload {
public static void add(Object o) {
System.out.println("Overloaded method with Object.");
}
public static void add(List l) {
System.out.println("Overloaded method with List.");
}
public static void main(String[] args) {
add(null);
}
}
输出:Overloaded method with List.
答案 0 :(得分:1)
调用List
重载是因为List
重载是最具体的匹配重载,因为所有List
实现都是Object
的子类。
非正式的直觉是,如果第一个方法处理的任何调用都可以传递给另一个没有编译时错误的调用,那么一个方法比另一个方法更具体。
由于您传递给add(List)
的任何参数也可以传递给add(Object)
,因此add(List)
更具体。因此,鉴于null
可以传递给两者,更具体的方法是选择的方法。
请注意,如果您有add(String)
重载,则无法编译,因为List
和String
具有“同等”特定性。 (或任何其他类:它不必是String
)。