Я хочу получить атрибут из указанного класса c, проблема в том, что этот класс, из которого я пытаюсь получить атрибут, является абстрактным суперклассом, а экземпляр, который я пытаюсь вызвать, - из дочерний класс этого суперкласса, я не могу вызвать метод из дочернего класса, так как экземпляр, который мне нужно вызвать, может отличаться в зависимости от выбора пользователя во время выполнения.
public abstract class player implements stuff {
int attribute a;
public Player(int location, Map map){
this.attribute a = attribute a;
}
public getAttribute(){
return a;
}
}
public abstract class Knight extends player {
public Knight(int location, Map map){
super(a);
this.a = fixedValue;
}
}
public class GameState implementes state { //this is where I instance the class
Map map;
Player player;
public gameState(){
map = new Map(rute);
//Here there may be several options but just a single instance will be created
if(condition){
player = new Knight(location, map);
}else{
player = new Mague(location, map);
}... //don't mind the if/else clauses
}
public void draw(Graphics g){
map.draw(g, player.getLocation());
player.draw(g);
}
}
public class PauseMenu{
public PauseMenu(Player player){
int height = value;
Color color = value;
.... more irrelevant stuff
}
public void drawInfo(Graphics g, Player player){
drawString(g, positionValues, player.getAttribute); // this is where my code fails
}
}
Я получаю нулевой указатель Исключение, я предполагаю, что я пытаюсь получить доступ к значению в родительском классе, которое существует только в дочернем классе (или, по крайней мере, инициализировано в дочернем классе), возможно, потому, что я использую экземпляр 'player' from ' Класс Player, а не из дочернего класса, поэтому я пытался выяснить, как вызвать метод из класса GameState, в котором создается «истинный» экземпляр, но я понятия не имею, как это сделать. Я был бы признателен за любую помощь от вас, ребята, и, пожалуйста, не берите в голову мой код ладьи ie.
Отвечая на чей-то вопрос: у рыцарского класса есть свой конструктор (извините, я набрал опечатку), но делится некоторой информацией с классом игрока, а также с некоторыми другими классами, такими как Mage, я не создаю экземпляр класса Player, я создаю экземпляр Knight или Mage, в зависимости от выбора пользователя. Метод DrawInfo вызывается из другого класса, называемого PauseState, в этом классе мне пришлось создать элемент Player Player, чтобы иметь возможность передавать информацию в метод drawInfo, я предполагаю, что это является причиной исключения в моей программе, я хочу чтобы узнать, как я могу использовать объект player, находящийся в GameState, в своем классе PauseState, чтобы мне не нужно было создавать этот объект player с неинициализированными аргументами.