Java 从超类数组访问子类字段?

Java 从超类数组访问子类字段?,java,arrays,polymorphism,Java,Arrays,Polymorphism,我最近刚开始学习java,所以我在理解我认为的多态性问题时有点困难。我正在尝试编写一个国际象棋游戏,因此我有一个名为GamePiece的超类数组,子类PawnPiece扩展了该数组。我在这两个类中都有一个名为MovePiece()的方法,它可以更改工件的位置。当我使用MovePiece()时,会更改PawnPiece的位置值,但当我尝试调用主代码中的位置时,它会给出“GamePiece”的不变位置。以下是我的一些代码: public class GamePiece { int posit

我最近刚开始学习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。你们这些编码向导有什么帮助吗?非常感谢。

从给出的代码中,我可以猜到在PawnPice中您正在更新变量位置Pawn,然后检查变量位置。所以你写错地方了。

有几个问题:

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

    • 您在
      GamePiece
    • 您在
      pawnpice
      中有
      int positionPawn
    您可能只需要其中之一:在
    PawnPiece
    中去掉
    positionPawn
    ,在
    GamePiece
    中使用
    position

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

  • positionPawnX=x->xscope@sansix哎呀。应该是
    positionPawn
    。谢谢,太好了!我明白我现在在做什么。我想我的问题比我想象的要简单得多。非常感谢!谢谢我删除了
    int-positionPawn
    ,现在只需从游戏件中使用
    int-position