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
。
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
。