2011-03-27 17 views
3
public class Main { 
    public void testMethod(Object o){ 
     System.out.println("Object Method called"); 
    } 
    public void testMethod(String s){ 
     System.out.println("String Method called"); 
    } 

    public static void main(String[] args) { 
     new Main().testMethod(null); 
    } 
} 

这个程序调用神奇的字符串的方法? Java编译器决定使用String方法的标准是什么?有人可以指出我的原因吗?如何与Java有不同的参数类型的同名方法之间做出选择?

回答

12

的规则是编译器选择“最具体的”过载了所有比赛。由于字符串是对象的一个​​子类,这使得String版本“更具体”,因此它选择

+0

而且,如果你想使用对象方法,就可以把参数的对象 - '新的Main()TestMethod的((对象)NULL);' – 2011-03-27 02:10:17

2

Java语言规范的执行部分是JLS 15.12.2.5

“如果不止一个成员方法既方便和适用于方法调用,就必须选择一个提供运行时方法调度描述符。Java的亲编纂语言使用选择最具体方法的规则。

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

该JLS然后继续给出了如何确定最具体的方法的详细技术规范

相关问题