Java 传递变量时的多态性。

Java polymorphism when passing variables.

class X{
    public void print(X x){System.out.println("xx");}
    public void print(Y y){System.out.println("xy");}
}
class Y extends X{
    public void print(X x){System.out.println("yx");}
    public void print(Y y){System.out.println("yy");}

    public static void main(String[] args){
        X x = new Y();
        x.print(x);
        System.out.println(x.getClass());
    }

}

我得到的输出是 "yx" end 我不明白为什么,x.getClass() returns "class Y" 所以它不应该调用参数所在的方法是吗?

重载(即选择使用相同 class/interface 的多个同名方法中的哪一个)是基于静态类型解析的。这与 overriding(在 X#print(X)Y#print(X) 之间选择,在运行时解决。

动态绑定对方法参数不起作用,因此方法的参数解析在编译时完成,编译器解析为静态类型X