java - 将参数传递给重载函数的一些问题
问题描述
package java_coding;
public class String_Null {
public static void main(String[] args) {
// TODO Auto-generated method stub
String_Null string_Null = new String_Null();
string_Null.method(null);
}
public void method(String string) {
System.out.println("String");
}
public void method( Object object) {
System.out.println("Object");
}
}
结果是字符串。解释为什么?
解决方案
因为选择了最具体的方法,所以最具体的是String
(相比Object
)。这是在 JLS 顺便说一句...我很快就会挖掘这个。
根据JLS
如果多个成员方法既可访问又适用于方法调用,则有必要选择一个为运行时方法分派提供描述符。Java 编程语言使用选择最具体方法的规则。
非正式的直觉是,如果第一个方法处理的任何调用都可以传递给另一个方法而不会出现编译时错误,那么一个方法比另一个方法更具体。