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中的定义。为什么会产生此错误?以及如何解决呢?
如果你想perfom_work在C执行perfom_work中A,你需要将其更改为:
public void perform_work() {
super.perform_work();
}
Run Code Online (Sandbox Code Playgroud)
并在 B
由于它是当前编写的,因此它是递归地调用自身,因此它永远不会停止。