我刚开始学习Java,因此在理解我认为是多态性的问题时遇到了一些麻烦。我正在尝试编写国际象棋游戏,所以我有一个名为GamePiece的超类数组,其子类PawnPiece对其进行了扩展。我在两个类中都有一个名为MovePiece()的方法,该方法可以更改片段的位置。当我使用MovePiece()时,更改PawnPiece的位置值,但是当我尝试在主代码中调用位置时,它为我提供了“GamePiece”的不变位置。这是我的一些代码:

public class GamePiece {
    int position;

    //Constructor
    public GamePiece(int x){
       position=x;
    }
    public void MovePiece(int positionOfMove){};
}

public class PawnPiece extends GamePiece{
    int positionPawn;

    //Subclass Constructor
    public PawnPiece(int x){
        super(x);
    }

    public void MovePiece(int positionOfMovePawn){
       positionPawn=x;
}

public classChessMain{
    public static void main(String[] arg){
        GamePiece[] allPieces = new GamePiece[32];
        int startPositionPawn = 9;     //Arbitrary#
        allPieces[8]=new PawnPiece(int startPositionPawn); //index is arbitrary
        int playerMove = 5;     //Arbitrary#
        allPieces[8].MovePiece(playerMove);
    }
}

最后一行给出了我的初始位置(在这种情况下为9),但是我知道是否可以访问PawnPiece的位置,它会给我5。您在那里编码向导是否有帮助?我真的很感激。

最佳答案

几个问题:

  • GamePieceMovePiece方法应该是抽象的。这样,您将强制所有选择为GamePiece的子类实现其自己的MovePiece方法。
  • 您将职位存储在两个位置:
  • 您的int position中有GamePiece
  • 您的int positionPawn中有PawnPiece

  • 您可能只需要其中之一:摆脱掉positionPawn中的PawnPiece并使用position中的GamePiece
  • (可选)Java约定应使方法名称以小写字母开头:将MovePiece重命名为movePiece
  • 10-04 23:28