这是我考试中给我的一个编码问题,我似乎无法弄清楚发生了什么,如果有人能告诉我发生了什么会有所帮助:)
class A1 {
void m1() {
System.out.println("A");
}
}
class B1 extends A1 {
void m1() {
System.out.println("B");
}
}
class C1 extends B1 {
void m1() {
System.out.println("C");
}
}
public class D1 extends C1 {
void m1() {
System.out.println("D");
}
void m2() {
m1();
((C1) this).m1();
((B1) this).m1();
((A1) this).m1();
}
public static void main(String args[]) {
new D1().m2();
}
}
这会产生输出:
D
D
D
D
我的预期输出:
D
C
B
A
我想知道为什么即使使用'这个'关键字它仍然在同一个类中调用该方法。
答案 0 :(得分:2)
即使您告诉编译器将其视为超级实例,所有实例仍然是相同的实例。
void m2() {
m1();
((C1) this).m1();
((B1) this).m1();
((A1) this).m1();
}
如果你有一辆大众Polo并将它们全部投放到Car上,它仍然是一个Polo,仍然可以称之为自己的方法。