为了理解静态绑定和动态绑定之间的区别,我已经实现了以下代码:
class A {
int met(A a) {
return 0;
}
int met(B b) {
return 1;
}
int met(C c) {
return 2;
}
}
class B extends A {
int met(A a) {
return 3;
}
int met(B b) {
return 4;
}
int met(C c) {
return 5;
}
}
class C extends B {
int f() {
return ((A)this).met((A)this);
}
}
public class Test {
public static void main(String[] args) {
C x = new C();
System.out.println(x.f());
}
}
我得到的结果是3,但我不明白为什么,因为第一次转换是转给了A。
B
覆盖了那个函数。 - SLaks