static
члены относятся к классу и являются общими для всех экземпляров. Каждый раз, когда вы создаете новый экземпляр, вы переопределяете значение currentPokemon
(в конструкторе). Удалите модификатор static
, и вы должны быть в порядке:
public class Player {
public String name;
public Pokemon[] party;
public Pokemon currentPokemon; // Here
РЕДАКТИРОВАТЬ: С последним комментарием Кристиана Кука, я думаю, теперь я понимаю формулировку проблемы. currentPokemon
инициализируется в конструкторе с party[0]
, что, конечно, null
, потому что party
был только что создан в предыдущей строке. В отличие от указателя в c (++), currentPokemon
не будет обновляться, когда party
обновляется - это не указатель, это просто ссылка на значение, которое party[0]
имел при инициализации.
Самый простой способ получить искомое поведение - не хранить currentPokemon
как член, но вместо этого есть метод для его извлечения:
public Pokemon getCurrentPokemon() {
return party[0];
}