通过使用'这个'来调用类来调用重载方法关键词

时间:2016-12-06 15:22:17

标签: java class inheritance

这是我考试中给我的一个编码问题,我似乎无法弄清楚发生了什么,如果有人能告诉我发生了什么会有所帮助:)

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

我想知道为什么即使使用'这个'关键字它仍然在同一个类中调用该方法。

1 个答案:

答案 0 :(得分:2)

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

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

如果你有一辆大众Polo并将它们全部投放到Car上,它仍然是一个Polo,仍然可以称之为自己的方法。