【发布时间】:2014-09-23 21:00:52
【问题描述】:
我很抱歉标题不好,但我不确定我的问题叫什么。 (如果可以的话,请在答案中告诉我)我有两个课程要与之互动。 “设置”类有我在“开始”类中需要的变量,反之亦然。我尝试通过以下方式在“开始”类中扩展“设置”类:
public class Begin extends Setup {
需要注意的是,我确实以这种方式引用了“Setup”类中的“Begin”类:
Begin b = new Begin();
我还尝试在每个相应的类中引用“设置”和“开始”类。这没有帮助。我在两个类中都收到了“java.lang.StackOverflowError”错误。我在引用其他类的地方得到错误。 ('Begin' 中的错误:'Setup s = new Setup();''Setup' 中的错误:'Begin b = new Begin();')
我不知道为什么会出现此错误,也不知道正确调用了什么“引用”类。如果这是重复的,我很抱歉。如果是,请将我链接到该页面。如果没有,请让我知道我可以做些什么来让我的程序再次正常工作。我在本主题中提到的代码和类只是示例。他们不是我正在使用的课程。我认为注意到我正在使用 JFrame 可能会有所帮助。我只是将一个类扩展到 JFrame,但是这两个类都在使用 JFrame。我在没有扩展 JFrame 的类中创建了一个新的 JFrame。如果您无法给出您认为会有所帮助的答案,我会将代码发布到我的两个课程中。 提前致谢! ~兰恩
编辑:谢谢大家!我真的很高兴你能够帮助我解决我给出的例子。再次感谢!
【问题讨论】:
-
你得到这个是因为你有一个无限递归。
-
没有看到你的代码,这只能是一个疯狂的猜测,但由于你似乎在基类中使用子类,听起来很可能,你触发了一个无限递归循环方法是相互定义的。
-
如果您调用创建
Begin的新实例,它将调用new Setup(),该实例将调用new Begin(),并且将调用new Setup()等。而不是尝试解决该问题,您应该考虑重构这两个类,使它们不相互依赖。 -
我假设,你执行 Begin b = new Begin();在安装程序的构造函数中。现在,当您创建一个新的 Begin 对象 (new Begin()) 时,会调用 Setup 的构造函数,它会调用“new Begin()”,它会调用 Setup 的构造函数,...
-
如果您发布更多相关代码,我们可以提供更明智且可能更好的答案。