public class OverloadingTest extends Format{
public int add(String s1){
System.out.println("With String");
return 1;
}
public int add(Object a){
System.out.println("With Object");
return 1;
}
public static void main(String[] args) {
OverloadingTest overloadingTest = new OverloadingTest();
overloadingTest.add(null);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么是程序的输出 With String ?
我试过阅读第6版的JLS,但我仍然找不到答案.
我猜的唯一原因是选择了继承层次结构中最接近的匹配.
所以在这种情况下,它需要String作为Object是它的超类.
小智 3
这个答案可以在问题“NULL 参数的方法重载”中找到中找到:
\n\n\n\n\nJava 将始终尝试使用可用方法的最具体适用版本(请参阅 JLS \xc2\xa715.12.2)。
\n
因此,String使用它,因为它是可用的最具体的类型。如果存在多个子类型,那么您将不得不进行强制转换null为适当的类型以指定要运行的函数。
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |