【发布时间】:2016-06-02 01:19:57
【问题描述】:
我正在编写一个程序,其中被覆盖的方法必须调用父类中的方法,而父类又必须调用被覆盖方法的原始方法。然后,被覆盖的方法也必须调用其父方法。
这是我的代码:
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 行是 float dogBark = dog();,Cow 中的第 63 行是 float meowz = hiCat();。
我相信第 63 行是dog() 中的问题。
似乎class Moo 中的hiCat() 正在调用class Cow 中的dog() 就像它应该的那样,但随后dog() 正在调用hiCat() 的覆盖版本,而不是与它共享一个类的版本.这让我很困惑,因为我以常规方式调用hiCat(),没有任何修饰符或任何东西。
为什么会发生这种情况,我该如何解决?
注意:程序的结构必须保持不变。
主要方法与手头的方法完全无关:
public static void main(String[] args)
{
InputClass input = new InputClass();
input.GenerateGUI();
}
【问题讨论】:
-
你能添加你的
main()方法吗? -
你覆盖了
hiCat。所以Moo.htCat调用Cow.dog,后者调用Moo.hiCat。无限循环。
标签: java inheritance methods overriding stack-overflow