“超级”部分我在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;
}
}
答案 0 :(得分:1)
这意味着“调用在直接超类中定义的此方法(或构造函数)的版本”。
答案 1 :(得分:1)
如果Alien
类具有带签名的构造函数,那么您所编写的内容是正确的:
public Alien(XYCoordination, int)
具体地,
super(currentLocation, energyCanister);
表示在运行此构造函数之前,运行直接超类的构造函数,并为其传递currentLocation
和energyCanister
值。请注意,每个构造函数(除Object
构造函数之外)都显式或隐式地链接到超类构造函数。
但是,以下内容可能不正确:
AggresiveAlien.currentLocation()
这需要currentLocation()
成为静态方法,这意味着AggresiveAlien
的所有实例都具有相同的位置......这没有多大意义。实际上,我认为该方法需要是一个实例方法,因此调用必须是:
this.currentLocation()
或只是
currentLocation()
你在很多地方犯了这个错误。