java - 通过使用 'this' 关键字转换类来调用重载方法

标签 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

我想知道为什么即使进行了强制转换并使用“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/

相关文章:

java - 在 Mountain Lion 上设置 JOGL

python - 在 Python 中弃用一个类作为父类

c# - 如何在 Collection<T> 继承类中找到元素索引?

c++ - classX' 没有命名类型

class - 定义类的要点

C++ 为什么要使用公共(public)、私有(private)或保护继承?

java - 多个 keystore 与多个 key 以及 key 的导出/导入

带代理的Java多线程post方法(使用Jsoup)

java - 将图像调整为固定大小,如果需要添加边框

c++ - 类和成员函数模板特化出错