当我引用两个类时,我得到一个Stack Overflow Error。为什么?

时间:2014-09-23 21:00:52

标签: java swing class jframe

我很抱歉这个糟糕的头衔,但我不确定我的问题是什么。 (如果可以的话,请在答案中告诉我)我有两个课程,我正在尝试与之互动。课程'设置'我在课堂上需要变量'开始'反之亦然。我试过扩展课程设置'在'开始'通过这样做:

public class Begin extends Setup {

需要注意的是,我确实参考了“开始”。 '设置'中的课程以这种方式上课:

Begin b = new Begin();

我也试过引用“设置”和“设置”。并且'开始'每个班级的班级。这没有用。我得到了' java.lang.StackOverflowError'两个班级都有错误。我得到了错误,我引用了另一个类。 (错误在'开始':'设置s =新设置();'错误'设置':'开始b =新开始() ;&#39)

我不知道为什么我会收到此错误,而且我不知道引用了什么'正确地调用了一个类。如果这是重复,我道歉。如果是,请将我链接到该页面。如果没有,请让我知道我可以做些什么来让我的程序再次正常工作。我在本主题中提到的代码和类只是示例。它们不是我正在使用的课程。我认为注意到我正在使用JFrame可能会有所帮助。我只将一个类扩展到JFrame,但这两个类都在使用JFrame。我在类中创建了一个不扩展JFrame的新JFrame。如果您无法给出答案,您认为会有所帮助,我会将代码发布到我的两个课程中。 提前致谢!   〜录音棚

编辑:谢谢你们!我很高兴你能用我给出的例子帮助我。再次感谢!

1 个答案:

答案 0 :(得分:4)

你有无限的递归。

  • 开始扩展设置,
  • 所以,初学者的构造函数必须调用安装程序的构造函数,并初始化它的超级安装程序属性
  • 和安装程序在内部创建另一个开始实例
  • 将初始化另一个 super 安装实例
  • 创建另一个开始实例
  • 将初始化另一个 super 安装实例
  • 创建另一个开始实例
  • 将初始化另一个 super 安装实例
  • 创建另一个开始实例
  • ...等等,直到你内存不足
不要这样做。您需要更改程序的整个结构,因为超类应该不了解其子类,更不用说它的实例。我敢打赌,Begin不应该延伸设置,以及我开始的地方。实际上这种情况:

  

课程'设置'我在课堂上需要变量'开始'反之亦然。

不是通过继承而是通过组合来解决的。例如......

public class Begin {
  private Setup setup;

  public void setSetup(Setup setup) {
     this.setup = setup;
  }

也许也是

public class Setup {
  private Begin begin;

  public void setBegin(Begin begin) {
    this.begin = begin;
  }

然后在其他地方:

Begin begin = new Begin();
Setup setup = new Setup();

begin.setSetup(setup);
setup.setBegin(begin);

还有其他注入依赖关系的方法,细节将取决于你的需要,所以不要把它作为福音,除了不为此目的使用继承。