Как вызвать один экземпляр из другого класса в java? - PullRequest
0 голосов
/ 29 марта 2020

Я хочу получить атрибут из указанного класса 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 с неинициализированными аргументами.

...