这是示例代码:
public class OverloadingExample {
public void display(Object obj){
System.out.println("Inside object");
}
public void display(Double doub){
System.out.println("Inside double");
}
public static void main(String args[]){
new OverloadingExample().display(null);
}
}
输出:
内部双重
任何人都可以解释一下为什么调用带有Double
参数的重载方法而不是Object
的方法?
答案 0 :(得分:6)
是的 - 因为Double
比Object
更具体。有从Double
到Object
的转换,但不是相反,这是使它更具体的原因。
有关详细信息,请参阅JLS的section 15.12.2.5。细节很难遵循,但这有助于:
非正式的直觉是,如果第一个方法处理的任何调用都可以传递给另一个没有编译时类型错误的调用,那么一个方法比另一个方法更具体。
所以在这里,display(Double doub)
的任何调用都可以由display(Object obj)
处理,但不能反过来。