这是我在考试中遇到的一个编码问题,我似乎无法弄清楚发生了什么,如果有人能告诉我发生了什么,将会很有帮助:)
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”关键字,它仍然调用同一个类中的方法。
最佳答案
即使您告诉编译器将其视为 super 实例,所有实例仍然是同一个实例。
void m2() {
m1();
((C1) this).m1();
((B1) this).m1();
((A1) this).m1();
}
如果您有一辆 VW Polo 并将它们全部转换到 Car,它仍然是一辆 Polo,并且仍然会调用它自己的方法。
关于java - 通过使用 'this' 关键字转换类来调用重载方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40998843/