Кто-нибудь может мне помочь решить проблему, которая о "супер" в Java? - PullRequest
0 голосов
/ 05 декабря 2010

«Супер» часть Я не очень хорошо понимаю в Java, так как я могу ее кодировать?

public class AggressiveAlien extends Alien
{

public AggressiveAlien(XYCoordination currentLocation, int energyCanister)
{
 super(currentLocation, energyCanister);
}

public int collectCanister(NormalPlanet canister)
{
 super.collectCanister(canister);
 n=1;
}

private boolean attack(int lifePoints)
{
 boolean attack;
 if (AggresiveAlien.currentLocation() = Alien.getOtherAlien())
 {
  AggresiveAlien.energyCanisters = (int) (1/2) * Alien.energyCanisters + AggresiveAlien.energyCanisters;
  lifePoints = lifePoints - 1;
  attack = true;
 }
 return attack;
 }
}

Ответы [ 2 ]

1 голос
/ 05 декабря 2010

То, что вы написали правильно, при условии, что класс Alien имеет конструктор с подписью:

public Alien(XYCoordination, int)

В частности,

super(currentLocation, energyCanister);

означает, что перед запуском этогоКонструктор запускает конструктор для непосредственного суперкласса, передавая ему значения currentLocation и energyCanister.Обратите внимание, что каждый конструктор (за исключением конструктора Object) связывается с конструктором суперкласса, явно или неявно.


Однако, вероятно, следующее неверно:

AggresiveAlien.currentLocation()

Это требует, чтобы currentLocation() был статическим методом, и это означало бы, что все экземпляры AggresiveAlien имеют одинаковое местоположение ... что не имеет большого смысла.На самом деле, я думаю, что метод должен быть методом экземпляра, и поэтому вызов должен быть:

this.currentLocation()

или просто

currentLocation()

Вы сделали эту ошибку вколичество мест.

1 голос
/ 05 декабря 2010

Это означает «вызов версии этого метода (или конструктора), определенной в непосредственном суперклассе».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...