我有这个子类AggressiveAlien,这里面有一个方法
public boolean attack()
{
boolean attack;
if (currentLocation == this.AggresiveAlien.getCurrentLocation)
{
energyCanister = (int) ( (1/2) * alien2.energyCanister + energyCanister);
lifePoints = (int) (lifePoints - (1/2)*alien2.energyCanister);
attack = true;
}
return attack;
}
我希望在父类Alien
中使用返回的值public void gotAttacked()
{
if (AggresiveAlien.attack())
energyCanister = energyCanister/2;
}
但它似乎在AggresiveAlien.attack()部分给出了错误。我有什么方法可以使用AggresiveAlien的返回值在Alien中使用吗?
非常感谢帮助。谢谢!
这是子类的另一部分
公共类AggressiveAlien延伸Alien { public AggressiveAlien(XYCoordination currentLocation,int energyCanister) { super(currentLocation,energyCanister); }
public int collectCanister(NormalPlanet canister)
{
super.collectCanister();
n=1;
}
答案 0 :(得分:1)
我认为你可能遇到两个问题......首先你需要将基类型转换为子类型,例如
((AggressiveAlien)this).attack()
另外,1/2实际上可能是0! 1和2被解释为整数,这意味着任何除法的值都被置尽了!所以1/2 =(int)0.5 = 0
检查你的类型!您最好使用0.5或使用/2.0强制值计算为float或double(取决于平台)。
希望这有帮助!
答案 1 :(得分:0)
看起来好像你正试图静态使用AggresiveAlien。相反,你可能想做:
if ((AggresiveAlien)this.attack()) energyCanister = energyCanister/2;
但鉴于信息量有限,我无法确定。
答案 2 :(得分:0)
你说,你有一个父类和子类,这意味着你在这里使用inheritance
。您可以使用虚函数轻松完成任务,然后覆盖子类。
在Alien
类中创建一个名为attack()
的函数,并在子类AggresiveAlien
中覆盖。
如下:
外星人类:
public boolean attack()
{
return false;
}
AggresiveAlien class:
public boolean attack()
{
return true;
}
和你的已解决功能
public void gotAttacked()
{
if (this.attack())
energyCanister = energyCanister/2;
}