当方法之间的差异是参数子类型时,将null传递给重写方法

时间:2013-09-27 09:54:49

标签: java oop jvm

输出:乙

为什么虚拟机会调用此方法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);
    }
}

1 个答案:

答案 0 :(得分:6)

调用最具体参数类型的方法。这是规则 这来自JLS section 15.12.2.5

  

如果多个成员方法都可访问并适用于方法调用,则必须选择一个为运行时方法调度提供描述符。 Java编程语言使用选择最具体方法的规则。