类型转换和方法重载

问题描述:

这是示例代码:类型转换和方法重载

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

是 - 因为DoubleObject更具体。有一个从DoubleObject的转换,但不是相反的方式,这是什么使它更具体。

有关更多信息,请参阅JLS的section 15.12.2.5。细节是相当难以遵循,但这种帮助:

非正式的直觉是一种方法比另一种更具体的,如果用第一种方法处理的任何调用可以传递到另一个没有编译期一时间类型错误。

所以这里的display(Double doub)任何调用可以通过display(Object obj)圆处理,但没有别的办法。

+0

谢谢。 “非正式的直觉是,如果任何由第一个方法处理的调用可以传递给另一个,而没有编译时类型错误,那么其中一种方法比另一种更具体。” – NINCOMPOOP 2012-02-04 10:11:11

+0

@noob:是的,我只是补充一点:) – 2012-02-04 10:11:30