java - 当我引用两个类时出现 StackOverflow 错误。为什么?

标签 java swing class jframe

很抱歉标题不好,但我不确定我的问题叫什么。 (如果可以,请在回答中告诉我)我有两个类(class)正在尝试与之互动。 “设置”类在“开始”类中有我需要的变量,反之亦然。我尝试通过以下方式在“开始”类中扩展类“设置”:

public class Begin extends Setup {

需要注意的是,我确实以这种方式在“设置”类中引用了“开始”类:

Begin b = new Begin();

我还尝试在每个类中引用“设置”和“开始”类。这没有帮助。我在两个类中都收到了“java.lang.StackOverflowError”错误。我在引用其他类(class)时遇到错误。 (“开始”中的错误:“设置 s = 新设置();”“设置”中的错误:“开始 b = 新开始();”)

我不知道为什么会收到此错误,而且我不知道什么是正确调用类的“引用”。如果这是重复的,我深表歉意。如果是,请将我链接到该页面。如果没有,请告诉我如何使我的程序再次正常运行。我在本主题中提到的代码和类只是示例。它们不是我正在使用的类。我认为注意到我正在使用 JFrame 可能会有所帮助。我只将一个类扩展到 JFrame,但两个类都在使用 JFrame。我在没有扩展 JFrame 的类中创建了一个新的 JFrame。如果您无法给出您认为有帮助的答案,我将发布我的两个类(class)的代码。 提前致谢! ~雷恩

编辑:谢谢大家!我真的很高兴你能用我举的例子帮助我。再次感谢!

最佳答案

您正在进行无限递归。

  • 开始扩展设置,
  • 因此 Begin 的构造函数必须调用 Setup 的构造函数,并初始化它的 super Setup 属性
  • 安装程序在内部创建另一个 Begin 实例
  • 这将初始化另一个super Setup 实例
  • 创建另一个 Begin 实例
  • 这将初始化另一个super Setup 实例
  • 创建另一个 Begin 实例
  • 这将初始化另一个super Setup 实例
  • 创建另一个 Begin 实例
  • ...等等,直到内存不足

不要那样做。您需要更改程序的整个结构,因为父类(super class)不应该知道其子类,更不用说它的实例了。我敢打赌,Begin 不应扩展 Setup,这就是我要开始的地方。事实上这种情况:

Class 'Setup' has variables I need in class 'Begin', and vice versa.

不是通过继承解决的,而是通过组合解决的。例如……

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);

还有其他注入(inject)依赖的方法,具体取决于您的需要,所以不要以此为福音,除了不要为此目的使用继承。

关于java - 当我引用两个类时出现 StackOverflow 错误。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26004651/

相关文章:

java - 序列化和反序列化 Joda DateTime 对象

Java Swing : how to add multiple JPanels to a JScrollPane

java - 为什么 Eclipse 要求您在声明后为变量赋值?

java - 如何将电话号码列表订阅到 aws-sns 主题

java - Spring、JavaConfig、BeanDefinition 和空的 getBeanClassName

java - 对Java中继承方法和字段的困惑

python - 未绑定(bind)的方法必须以实例作为第一个参数调用(而不是什么都没有)

java - JDialog在Windows 10上有一个隐式的最小宽度,如何绕过它?

java - 如何确定用户显示的中点?

python - 如何将类对象的所有方法的结果作为一个列表返回?