任何人都可以帮我解决Java中的“超级”问题吗?

时间:2010-12-05 06:05:30

标签: java inheritance

“超级”部分我在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 个答案:

答案 0 :(得分:1)

这意味着“调用在直接超类中定义的此方法(或构造函数)的版本”。

答案 1 :(得分:1)

如果Alien类具有带签名的构造函数,那么您所编写的内容是正确的:

public Alien(XYCoordination, int)

具体地,

super(currentLocation, energyCanister);

表示在运行此构造函数之前,运行直接超类的构造函数,并为其传递currentLocationenergyCanister值。请注意,每个构造函数(除Object构造函数之外)都显式或隐式地链接到超类构造函数。


但是,以下内容可能不正确:

AggresiveAlien.currentLocation()

这需要currentLocation()成为静态方法,这意味着AggresiveAlien的所有实例都具有相同的位置......这没有多大意义。实际上,我认为该方法需要是一个实例方法,因此调用必须是:

this.currentLocation()

或只是

currentLocation()

你在很多地方犯了这个错误。