我正在编写一个程序,其中重写的方法必须调用父类中的方法,而父类又必须调用被重写方法的原始方法。然后,被重写的方法还必须调用其父方法。
这是我的代码:
public class Cow
{
public float hiCat()
{
...
return meow;
}
public float dog()
{
float meowz = hiCat();
...
}
}
public class Moo extends Cow
{
public float hiCat()
{
float dogBark = dog();
float meows = super.hiCat();
...
}
}
这给了我一个堆栈溢出错误,如下所示:
Exception in thread "main" java.lang.StackOverflowError
at Moo.hiCat(Moo.java:12)
at Cow.dog(Cow.java:63)
Moo
中的第 12 行是 floatdogBark = dog();
,Cow
中的第 63 行是 float meowz = hiCat();
。
我相信第 63 行是 dog()
中的问题。
看起来class Moo
中的hiCat()
正在调用class Cow
中的dog()
,就像它应该的那样,但是dog()
正在调用hiCat()
的重写版本,而不是与之共享一个类的版本。这让我很困惑,因为我以常规方式调用 hiCat()
,没有任何修饰符或任何东西。
为什么会发生这种情况?我该如何解决?
注意:程序的结构必须保持不变。
Main 方法与手头的方法完全无关:
public static void main(String[] args)
{
InputClass input = new InputClass();
input.GenerateGUI();
}
最佳答案
这是因为您在 hiCat()
的重写方法中调用 dog()
,然后当您执行该方法时,此行 floatdogBark =dog()
调用 dog()
方法,然后在父类(super class)中的 dog()
方法内部再次调用 hiCat();
和 hiCat();
再次调用 dog()
因为 hiCat();
方法被子类重写,所以它会调用被重写的 hiCat();
方法......所以 StackOverflowError
发生
关于java - 调用重写的 super 方法会导致无限递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35522743/