Est-il possible d'accéder à une variable de la sous-classe à l'aide de l'objet de la super-classe dans le polymorphisme
Comment puis-je accéder à l'état de la variable de classe KeyBoardPlayer
avec un objet de la classe 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);
}
}
}
OriginalL'auteur fari | 2010-04-07
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas.
Il n'y a pas de possibilité d'accès des membres d'une sous-classe de son parent. Si il y en avait, la suite serait de provoquer le chaos de masse:
Alors:
OriginalL'auteur Justin Niessner
Il est impossible de le faire.
Mais vous pouvez prendre la ligne:
public KalaGameState state;
et le mettre dans la définition de la classe
KalaPlayer
.Cela suppose que chaque sous-classe de
KalaPlayer
doit avoir un état de lui-même.Ensuite, vous pouvez toujours définir l'état de votre constructeur pour chaque instance de la création.
Ce n'est plus un problème de conception que d'un problème avec la langue, parce que votre super-classe doit contenir toutes les informations qui est commun à toutes les sous-classes.
L'héritage est un hiérarchique chose où chaque sous-classe ajoute plus d'informations à celui qui est stocké dans la superclasse. Il est donc impossible d'accéder à des données qui n'est pas spécifié dans la classe elle-même. Et en déclarant les variables comme KalaPlayer vous dire au compilateur que seules les informations de KalaPlayer est disponible.
Il serait agréable d'avoir une explication à partir de la downvoters.
OriginalL'auteur MKroehnert