当我运行此代码时,输出为“String”;如果我隐藏接受String参数的方法并再次运行代码然后输出是“对象”,那么有人可以解释一下这段代码是如何工作的吗?
public class Example {
static void method(Object obj) {
System.out.println("Object");
}
static void method(String str) {
System.out.println("String");
}
public static void main(String args[]) {
method(null);
}
}
答案 0 :(得分:8)
编译器将选择最具体的方法,在这种情况下,String是Object的子类,因此将调用String作为参数的方法。
如果多个成员方法都可访问且适用于a 方法调用,有必要选择一个提供 运行时方法调度的描述符。 Java编程 language使用选择最具体方法的规则。
非正式的直觉是一种方法更具体 如果可以传递第一个方法处理的任何调用,则为另一个 没有编译时类型错误的另一个。