2015-03-19 37 views
-1

我不知道我的程序有什麼問題。本質上,我只想成爲我班的一個對象。然後,該對象應該在其構造函數內創建另一個對象。但是,當我從第一個對象的構造函數中創建的對象,我得到的錯誤:我得到一個StackOverflowError遞歸調用相同的錯誤

"Exception in thread "main" java.lang.StackOverflowError at Setup.(Setup.java:31) at GameController.(GameController.java:30)"

錯誤的這一部分重複,直到我運行「錯誤」盒已滿:

"at Setup.(Setup.java:31)
at GameController.(GameController.java:30)"

這裏是我的代碼(即在主創建的對象)

public class GameController { 
GameController() { 
Setup Set = new Setup(); //Refers to error happening here. 

(設置對象類)

public class Setup extends GameController { 
Setup() { //Refers to error happening here. 

我不介意以不同方式執行我的代碼,但我想知道我在做什麼錯誤,所以我可以在將來做對。

+2

做出決定。 *要麼你得到一個'StackOverflowException' *或者*它不能編譯。這兩者是相互排斥的。 – EJP 2015-03-19 00:56:39

回答

6

沒有安裝程序擴展GameController!這是什麼導致不需要的遞歸,可能不是必需的。

當你創建一個設置對象,它會調用GameController的構造函數,它創建一個設置對象,然後調用GameController的構造函數,它創建一個設置對象,然後調用GameController的構造函數,它創建一個設置對象,然後調用GameController的構造函數,創建一個設置對象,然後調用GameController的構造函數,它創建一個設置對象,然後調用GameController的構造函數,它創建一個設置對象,然後調用....

循環往復。

我懷疑你在這裏使用繼承的原因是不恰當的,所以再次,沒有安裝程序擴展GameController,這個問題應該得到解決。


關於,

Oh, and it does NOT compile.

不可能。如果它沒有編譯並運行,你就看不到這個異常。

+0

我不知道它一遍又一遍地調用兩個構造函數,現在這是有道理的。 非常感謝! – Zag 2015-03-19 01:02:24

+0

@Zag:不客氣。瞭解每個子類將在創建時調用每個超類的構造函數。爲什麼安裝程序首先擴展GameController?如果要訪問GameController的變量,那將是非常不合適的,並且不起作用。 – 2015-03-19 01:05:23

+0

@Zag:你爲什麼說你的代碼沒有編譯?這是不可能的。 – 2015-03-19 01:05:53