【发布时间】:2016-12-06 15:22:17
【问题描述】:
这是考试中给我的一个编码问题,我似乎无法弄清楚发生了什么,如果有人能告诉我发生了什么会很有帮助:)
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
我想知道为什么即使使用强制转换和“this”关键字,它仍然在同一个类中调用方法。
【问题讨论】:
-
Java inheritance的可能重复
-
因为尽管您转换为该类型,但您的实例仍然是最派生的。因此,当您调用
m1时,也会使用最衍生的方法,该方法在D中定义。
标签: java class inheritance