Java 通过使用';这';关键词

Java 通过使用';这';关键词,java,class,inheritance,Java,Class,Inheritance,这是在考试中给我的一个编码问题,我似乎不知道发生了什么,如果有人能告诉我发生了什么,那会很有帮助:) 这将产生以下输出: D D D D D C B A 我的预期产出: D D D D D C B A 我想知道为什么即使使用强制转换和'this'关键字,它仍然在同一个类中调用该方法。所有实例仍然是同一个实例,即使您告诉编译器将其视为超级实例 void m2() { m1(); ((C1) this).m1(); ((B1) this).m1

这是在考试中给我的一个编码问题,我似乎不知道发生了什么,如果有人能告诉我发生了什么,那会很有帮助:)

这将产生以下输出:

D
D
D
D
D
C
B
A
我的预期产出:

D
D
D
D
D
C
B
A

我想知道为什么即使使用强制转换和'this'关键字,它仍然在同一个类中调用该方法。

所有实例仍然是同一个实例,即使您告诉编译器将其视为超级实例

void m2() {
        m1();
        ((C1) this).m1();
        ((B1) this).m1();
        ((A1) this).m1();
    }

如果您有一个VW Polo并将它们全部转换为Car,那么它仍然是一个Polo,并且仍然会调用它自己的方法。

所有实例仍然是同一个实例,即使您告诉编译器将其视为超级实例

void m2() {
        m1();
        ((C1) this).m1();
        ((B1) this).m1();
        ((A1) this).m1();
    }

如果您有一辆大众Polo,并将其全部转换为Car,它仍然是一辆Polo,并且仍将调用它自己的方法。

可能的重复,因为尽管您转换为该类型,但您的实例仍然是最派生的实例。因此,当您调用
m1
时,也会使用
D
中定义的最派生的方法。的可能重复,因为尽管您强制转换为该类型,但您的实例仍然是最派生的。因此,当您调用
m1
时,也会使用
D
中定义的最派生的方法。