如何确定哪个子类方法重写超类?爪哇

时间:2020-05-13 11:57:43

标签: java inheritance polymorphism

我正在构建一个经典项目,是时候在此游戏中实现AI播放器了。因此,我的想法是创建一个名为NimAIPlayer的类和另一个名为NimHumanPlayer的类。它们都继承了抽象类NimPlayer

AI播放器正在自动播放,我在NimPlayer中定义了一种称为moveStone()的抽象方法。我为NimHumanPlayerNimAIPlayer类定义了不同的方法来覆盖。

如果玩家是人类,则输入来自用户;另一方面,如果玩家是AI,则它会根据某些规则自动生成一个随机整数。

我尝试过的是,但是它不起作用:

if (player1 instanceof NimHumanPlayer) {
      player1.moveStone();
   } else {
      player1.moveStone();

感谢您的帮助!我看了很多教程,似乎有一种方法可以选择要覆盖的子类。

这是我的NimPlayer课程的一部分:

import java.io.Serializable;
abstract class NimPlayer extends Nimsys implements Serializable  {

private String userName;
private String familyName;
private String givenName;
private int gamesPlayed;
private int gamesWon;

public NimPlayer(String userName, String familyName, String givenName) {

    this.userName = userName;
    this.familyName = familyName;
    this.givenName = givenName;
    this.gamesPlayed = 0;
    this.gamesWon = 0;
}

public abstract int moveStone();
}
//getters and setters
}

我的NimHumanPlayer的一部分:

public class NimHumanPlayer extends NimPlayer{

public NimHumanPlayer(String userName, String familyName, String givenName) {
    super(userName, familyName, givenName);

}

public int moveStone() {
    int stoneTaken = in.nextInt(); // in is the scanner inherited from super class
    return stoneTaken;
}


}

我的NimAIPlayer的一部分:

public class NimAIPlayer extends NimPlayer {
private NimGame nimGame = new NimGame(); // create a obj to call the field

public NimAIPlayer(String userName, String familyName, String givenName) {
    super(userName, familyName, givenName);

}

public int moveStone(int upperBound, int stoneBalance) {

    stoneBalance = nimGame.stoneBalance; // for calculation
    upperBound = nimGame.upperBound; // for calculation

    int stoneTaken = ThreadLocalRandom.current().nextInt(1, upperBound +1 ); 
    if (stoneTaken > stoneBalance) {
        stoneTaken =  ThreadLocalRandom.current().nextInt(1, stoneBalance +1 );
    }

    return stoneTaken;
}

NimGame字段的一部分以供参考:

public class NimGame extends Nimsys {

NimPlayer player1;
NimPlayer player2;

String initialStoneInput;
String dataRemoval;

int stars;
int stoneBalance;
int initialStone;
int upperBound;

public NimGame() {
}

public NimGame(NimModel nimModel, String initialStoneInput, String dataRemoval, NimPlayer player1, NimPlayer player2) {
    this.initialStoneInput = initialStoneInput;
    this.dataRemoval = dataRemoval;
    this.player1 = player1;
    this.player2 = player2;
}

0 个答案:

没有答案