gpt4 book ai didi

java - 调用重写的 super 方法会导致无限递归

转载 作者:太空宇宙 更新时间:2023-11-04 12:54:37 24 4
gpt4 key购买 nike

我正在编写一个程序,其中重写的方法必须调用父类中的方法,而父类又必须调用被重写方法的原始方法。然后,被重写的方法还必须调用其父方法。

这是我的代码:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com