gpt4 book ai didi

java - 从父类(super class)数组访问子类字段?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:53:37 26 4
gpt4 key购买 nike

我最近才开始学习 java,所以我在理解我认为的多态性问题时遇到了一些困难。我正在尝试编写一个国际象棋游戏,所以我有一个名为 GamePiece 的父类(super class)数组,子类 PawnPiece 对其进行了扩展。我在这两个类中都有一个名为 MovePiece() 的方法,它可以改变棋子的位置。当我使用 MovePiece() 时,更改了 PawnPiece 的位置值,但是当我尝试调用我的主代码中的位置时,它给了我不变的位置 '游戏机'。这是我的一些代码:

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。任何帮助所有编码向导那里?我真的很感激。

最佳答案

几个问题:

  1. GamePiece 和方法MovePiece 应该是抽象的。这样,您将强制任何选择成为 GamePiece 的子类实现其自己的 MovePiece 方法。
  2. 您将位置存储在两个地方:

    • 您在 GamePiece 中有 int position
    • 您在 PawnPiece 中有 int positionPawn

    您可能只想要其中之一:摆脱 PawnPiece 中的 positionPawn 并在 GamePiece 中使用 position >.

  3. (可选)Java 约定是方法名称以小写字母开头:将 MovePiece 重命名为 movePiece

关于java - 从父类(super class)数组访问子类字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14887463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com