重建'this'变通方法

coz*_*zzy 0 java inheritance casting chess

我正在尝试创建一个简单的国际象棋程序,我在实现典当促销时遇到了一个小问题.我有一个抽象类和6个类(King,Queen,Rook,Knight,Bishop和Pawn)扩展它.因此,当一个棋子到达棋盘的另一端时,我希望他改变让我们说皇后.

最简单的方法是做这样的事情:

Public class Pawn extends Piece {
...
  @Override
  public void move(int toCol, int toRow) {
    this.col = toCol; this.row = toRow;
    if (toRow == endRow)
      this = (Queen)this
  }
}
Run Code Online (Sandbox Code Playgroud)

这显然是不可能的,因为人们根本无法分配给.

所以我需要检测促销并从外部投射.但由于某些原因,我存储了两次配件.作为一个2D阵列的片断,但也作为每个玩家的2个片段列表.这意味着我需要在列表中找到pawn并将其删除,然后添加具有相同坐标的新queen并将其分配给board [col] [row].

我想知道是否有更好的方法来做到这一点.不知何故从"内部"改变对象的类.

Tho*_*unk 5

我不明白,你想要完成什么.如果你在物理象棋游戏之后进行模型化,那么你的棋子就会被丢弃,而是会使用另一个棋子.因此,棋子removed来自你的游戏板,而女王则inserted处于典当前的位置. 您不能简单地更改实例的类.