在下面的示例中,C类扩展B,B扩展A.所有具有覆盖静态方法的类。我知道基于引用的编译时类型调用静态方法。在方法调用中表达式cm(),引用c的编译时类型是C.方法调用表达式cm()调用在类C中声明的方法m但在下一个语句中我正在移动C引用B,就像这样B b = c ;但它调用B的类静态方法,而在A的情况下也是。它基于引用权调用。
class Test {
static void m() {
System.out.print("A");
}
}
class B extends Test {
static void m() {
System.out.print("B");
}
}
class C extends B {
static void m() {
System.out.print("C");
}
}
class D {
public static void main(String[] args) {
C c = new C();
// System.out.println("c = " + c);
c.m();
B b = c;
// System.out.println("b = " + b);
b.m();
Test a = b;
// System.out.println("a = " + a);
a.m();
}
}