转换为超类时出现StackOverflow错误

ham*_*uki 1 java stack-overflow

我在互联网上找到了以下代码。

 class A {
        public void perform_work() {
            System.out.println("A");
        }
    }
class B extends A {
    public void perform_work() {
        System.out.println("B");
    }
}

class C extends B {
    public void perform_work() {
        ((A) this).perform_work(); // Line 163
    }

    public static void main(String[] args) {
        C c = new C();
        c.perform_work();
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码可以干净地编译,但是运行时却给我一个错误:

Exception in thread "main" java.lang.StackOverflowError
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
Run Code Online (Sandbox Code Playgroud)

...........................................更多类似的错误

我期望第163行(在上面的代码中指定)将调用perfom_work()类A中的定义。为什么会产生此错误?以及如何解决呢?

lea*_*iro 8

如果你想perfom_workC执行perfom_workA,你需要将其更改为:

public void perform_work() {
    super.perform_work();
}
Run Code Online (Sandbox Code Playgroud)

并在 B

由于它是当前编写的,因此它是递归地调用自身,因此它永远不会停止。