新年快乐的家伙:-) 我需要你的帮助来了解我的错误。子类调用父类递归的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