如何使用类KeyBoardPlayer
的对象访问类KalaPlayer
的状态变量?
/**
* An abstract class representing a player in Kala. Extend this class
* to make your own players (e.g. human players entering moves at the keyboard
* or computer players with programmed strategies for making moves).
*/
public abstract class KalaPlayer {
/**
* Method by which a player selects a move.
* @param gs The current game state
* @return A side pit number in the range 1-6
* @throws NoMoveAvailableException if all side pits for the player are empty
* (i.e. the game is over)
*/
public abstract int chooseMove(KalaGameState gs) throws NoMoveAvailableException;
}
public class KeyBoardPlayer extends KalaPlayer {
/**
* Method by which a player selects a move.
* @param gs The current game state
* @return A side pit number in the range 1-6
* @throws NoMoveAvailableException if all side pits for the player are empty
* (i.e. the game is over)
*/
public KalaGameState state;
public KeyBoardPlayer() {
System.out.println("Enter the number of stones to play with: ");
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int key = Integer.parseInt(br.readLine());
state=new KalaGameState(key);
//key=player1.state.turn;
} catch(IOException e) {
System.out.println(e);
}
}
public int chooseMove(KalaGameState gs) throws NoMoveAvailableException{
return 0;
}
}
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class KalaGame {
KalaPlayer player1,player2;
public KalaGame(KeyBoardPlayer Player1,KeyBoardPlayer Player2) {
//super(0);
player1=new KeyBoardPlayer();
player2 = new KeyBoardPlayer();
//player1=Player1;
//player2=Player2;
//player1.state ****how can i access the stae variable from Keyboard CLass using object from KalaPlayer
key=player1.state.turn;
}
public void play() {
System.out.println("Enter the number of stones to play with: ");
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int key = Integer.parseInt(br.readLine());
System.out.println(key);
KalaGameState state=new KalaGameState(key);
printGame();
} catch(IOException e) {
System.out.println(e);
}
}
}
答案 0 :(得分:6)
你不能。
没有能力从其父级访问子类的成员。如果有的话,以下会导致质量混乱:
public class Vehicle
{
}
public class Car extends Vehicle
{
SteeringWheel _wheel = new SteeringWheel();
public SteeringWheel getSteeringWheel { return _wheel; }
public SteeringWheel setSteeringWheel(SteeringWheel value)
{
_wheel = value;
}
}
public class Bicycle extends Vehicle
{
}
然后:
Vehicle myVehicle = new Bicycle();
// This call couldn't possibly work since Bicylce has no steering wheel
// and Vehicle isn't aware of what the type of the is/isn't.
SteeringWheel myWheel = myVehicle.getSteeringWheel();
答案 1 :(得分:-2)
这是不可能的。
但你可以采取行:
public KalaGameState state;
并将其放在类KalaPlayer
的定义中。
这假设KalaPlayer
的每个子类都应该具有自身的状态。
然后,您仍然可以在构造函数中为您正在创建的每个实例设置状态。
所以这更像是一个设计问题,而不是语言问题,因为你的超类应该包含所有子类共有的所有信息。