簡體   English   中英

引用兩個類時,出現StackOverflow錯誤。 為什么?

[英]I get a StackOverflow Error when I refrence two classes. Why?

很抱歉,我的頭銜很差,但是我不確定我叫什么問題。 (如果可以的話,請在回答中讓我知道)我正在嘗試與兩個類進行交互。 類“設置”具有類“開始”中需要的變量,反之亦然。 我嘗試通過執行以下操作來擴展'Begin'類中的'Setup'類:

public class Begin extends Setup {

需要注意的是,我確實以這種方式在“設置”類中引用了“開始”類:

Begin b = new Begin();

我也嘗試在每個類中同時引用'Setup'和'Begin'類。 這沒有幫助。 我在兩個類中都收到“ java.lang.StackOverflowError”錯誤。 我在改讀其他班級時遇到錯誤。 (“開始”中的錯誤:“設置s =新的Setup();”“設置”中的錯誤:“開始b =新的Begin();”)

我不知道為什么會收到此錯誤,並且我不知道正確調用了一個類的“引用”。 如果這是重復的,我深表歉意。 如果是的話,請將我鏈接到該頁面。 如果沒有,請告訴我該如何使我的程序再次正常運行。 我在本主題中提到的代碼和類僅是示例。 他們不是我正在使用的課程。 我認為注意到我正在使用JFrame可能會有所幫助。 我只將一個類擴展到JFrame,但是兩個類都在使用JFrame。 我在不擴展JFrame的類中創建了一個新的JFrame。 如果您無法給出答案,您認為會有所幫助,我會將代碼發布到我的兩個班級中。 提前致謝! 〜雷恩

編輯:謝謝大家! 我很高興您能夠為我提供的示例幫助我。 再次感謝!

您正在進行無限遞歸。

  • 開始擴展安裝程序,
  • 因此Begin的構造函數必須調用Setup的構造函數,並初始化它的超級 Setup屬性
  • 然后安裝程序在內部創建另一個 Begin實例
  • 這將初始化另一個超級安裝程序實例
  • 這將創建另一個 Begin實例
  • 這將初始化另一個超級安裝程序實例
  • 這將創建另一個 Begin實例
  • 這將初始化另一個超級安裝程序實例
  • 這將創建另一個 Begin實例
  • ...等等,直到內存用完

不要那樣做 您需要更改程序的整個結構,因為超類應該對其子類一無所知,其實例要少得多。 我敢打賭,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);

還有其他注入依賴項的方法,具體取決於您的需要,因此不要將此視為福音,除非不要為此目的使用繼承。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM