7

输出:B

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

1 回答 1

6

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

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

于 2013-09-27T09:57:12.890 回答