输出:乙
为什么虚拟机会调用此方法f(null){System.out.println("B");}
?
为什么不f(null){System.out.println("A");}
public class Test{
public static class A {}
public static class B extends A {}
public void f(A a) {System.out.println("A");}
public void f(B a) {System.out.println("B");}
public static void main(String[] args) {
new Test().f(null);
}
}
答案 0 :(得分:6)
调用最具体参数类型的方法。这是规则 这来自JLS section 15.12.2.5
如果多个成员方法都可访问并适用于方法调用,则必须选择一个为运行时方法调度提供描述符。 Java编程语言使用选择最具体方法的规则。