我刚刚开始学习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.你们所有的编码向导都有帮助吗?我真的很感激。
答案 0 :(得分:2)
几个问题:
GamePiece
和方法MovePiece
应该是抽象的。这样,您将强制选择GamePiece
的任何子类实现其自己的MovePiece
方法。您将位置存储在两个位置:
int position
GamePiece
int positionPawn
中有PawnPiece
。您可能只想要其中一个:摆脱positionPawn
中的PawnPiece
并使用position
中的GamePiece
。
MovePiece
重命名为movePiece
答案 1 :(得分:1)
从给出的代码中我可以猜到,在PawnPiece中你正在更新变量 positionPawn ,然后检查变量位置。所以你写错了地方。