Java如何决定使用相同名称和不同参数类型的方法?
这个程序神奇地调用字符串方法?Java编译器根据什么标准决定使用字符串方法?有人能告诉我原因吗?规则是编译器从所有匹配项中选择“最特定”的重载。由于String是Object的子类,这使得String版本“更具体”,因此它被选择在这里:Java如何决定使用相同名称和不同参数类型的方法?,java,overloading,Java,Overloading,这个程序神奇地调用字符串方法?Java编译器根据什么标准决定使用字符串方法?有人能告诉我原因吗?规则是编译器从所有匹配项中选择“最特定”的重载。由于String是Object的子类,这使得String版本“更具体”,因此它被选择在这里: Java语言规范的有效部分是: 如果一个方法调用可以访问并适用于多个成员方法,则必须选择一个成员方法来为运行时方法分派提供描述符。Java编程语言使用的规则是选择最具体的方法 非正式的直觉是,如果第一个方法处理的任何调用都可以传递给另一个方法,而不会出现编译时类
Java语言规范的有效部分是: 如果一个方法调用可以访问并适用于多个成员方法,则必须选择一个成员方法来为运行时方法分派提供描述符。Java编程语言使用的规则是选择最具体的方法 非正式的直觉是,如果第一个方法处理的任何调用都可以传递给另一个方法,而不会出现编译时类型错误,那么一个方法比另一个方法更具体。”
JLS接着给出如何确定最具体方法的详细技术规范。并且,如果要使用Object方法,可以将参数强制转换为对象--
new Main().testMethod((Object)null)代码>
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);
}
}