3

私は最近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)を示していますが、の位置にアクセスできれば、PawnPiece5が得られます。コーディングウィザードの助けはありますか?本当にありがたいです。

4

2 に答える 2

2

いくつかの問題:

  1. クラスGamePieceとメソッドMovePieceは抽象的である必要があります。このようにして、を選択したサブクラスにGamePiece独自のMovePieceメソッドを実装するように強制します。
  2. 位置を2か所に保存しています。

    • あなたint positionGamePiece
    • あなたはint positionPawnにいPawnPieceます。

    おそらく、これらのうちの1つだけが必要です。inを削除してpositionPawninPawnPieceを使用positionGamePieceます。

  3. (オプション)Javaの規則では、メソッド名は小文字で始まります。名前を次のように変更MovePieceします。movePiece
于 2013-02-15T02:33:20.773 に答える
1

与えられたコードから、PawnPieceで変数positionPawnを更新していると推測できます。次に、変数positionを確認します。だからあなたは間違った場所に書いています。

于 2013-02-15T02:32:22.490 に答える