新年快樂的傢伙:-) 我需要你的幫助來了解我的錯誤。子類調用父類遞歸的Java
我創建板類和細胞類誰擴展板類,並在板I類也有單元的陣列。 當我運行我的代碼時,我得到了java.lang.StackOverflowError異常。
板類:
Cell boardGame[][] = new Cell[8][8];
public Board() {
/*
* for (int i = 0; i < board.length; i++) { for (int j = 0; j <
* board[i].length; j++) { board[i][j] = "-"; }
*/
reorder();
printBoard();
}
public void reorder() {
for (int i = 0; i < 8; i++) {
boardGame[1][i] = new Cell((new Pawn(ChessPiece.PAWN, Color.BLACK)), 1, i);
boardGame[6][i] = new Cell((new Pawn(ChessPiece.PAWN, Color.WHITE)), 6, i);
}
{...}
Cell類:
public Cell(int xPosition, int yPosition) {
position = new MoveSet(xPosition, yPosition);
color = null;
display = null;
}
public Cell(Soldier soldier, int xPosition, int yPosition) {
this(xPosition, yPosition);
this.soldier = soldier;
setRoleMark();
}
{...}
當我試圖調試我發現我的電池構造到董事會的構造和運行重新排序()再次,然後創建另一個細胞的構造函數,去給董事會的構造和運行再次重新排序...
我意識到這是一個可怕的設計,因爲我的手機類不從董事會CLA需要什麼無論如何,但我想明白爲什麼會發生。 我從來沒有叫過超級,所以爲什麼我的單元類叫板的構造函數?
我的猜測是每個Cell都試圖從它的超類創建Cell boardGame[][] = new Cell[8][8]
(因爲子類獲得超級變量的權利?),所以它基本上試圖創建它自己。
但我不知道,你可以批准它給我嗎?
感謝, 或者
以何種方式爲'Board'的'Cell'可能是子類?這是你的根本錯誤。 'Board'是'Cell'對象的容器,但'Cell'不是'Board'的一種類型。 –
如果單元「是」董事會,董事會的構造函數調用重新排序,創建更多的單元格,從beginnig開始無休止地。 – Stefan