我刚开始学习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。您在那里编码向导是否有帮助?我真的很感激。 最佳答案
几个问题:
GamePiece
和MovePiece
方法应该是抽象的。这样,您将强制所有选择为GamePiece
的子类实现其自己的MovePiece
方法。 int position
中有GamePiece
int positionPawn
中有PawnPiece
。 您可能只需要其中之一:摆脱掉
positionPawn
中的PawnPiece
并使用position
中的GamePiece
。 MovePiece
重命名为movePiece