- 此问题在此处已有答案**:
Why do I get StackOverflowError [duplicate](1个答案)
2天前关闭。
我有一个类,它调用超类的一个简单方法,如下所示:
class A {
public void doPrint() {
print();
}
public void print() {
System.out.println("A");
}
}
class B extends A {
public void doPrint() {
print();
}
public void print() {
super.print();
}
}
class C extends B {
public void print() {
super.doPrint(); // Line 163
}
public static void main(String[] args) {
C c = new C();
c.print();
}
}
但是,当我运行这个程序时,我得到一个堆栈溢出错误:
Exception in thread "main" java.lang.StackOverflowError
at B.doPrint(B.java:5)
at C.print(C.java:6)
at B.doPrint(B.java:5)
at C.print(C.java:6)
at B.doPrint(B.java:5)
at C.print(C.java:6)
at B.doPrint(B.java:5)
at C.print(C.java:6)
at B.doPrint(B.java:5)
at C.print(C.java:6)
我不确定这是怎么发生的。据我所知,我没有进行任何递归调用。super.doPrint()
正在调用超类的方法,而不是当前类的方法。我不确定出了什么问题。
1条答案
按热度按时间0yg35tkg1#
从类B中删除覆盖,否则,它将从C中调用cyclic,在类C中,您覆盖print方法,因此在类C print方法中,您调用Super的doPrint,类B的doPrint方法调用,但doPrint调用带有 this 示例的print,this 示例是类C的对象,它变为循环并卡在StackOverflow中,此处是更新一