【发布时间】:2021-12-20 15:50:12
【问题描述】:
这是类Enemy中方法takeDamage的代码,它是类Vampire的超类。
public void takeDamage(int damage) {
int remainingHitPoints = hitPoints - damage;
if (remainingHitPoints > 0) {
setHitPoints(remainingHitPoints);
System.out.println(name + " took " + damage + " damage and have " + remainingHitPoints + " HitPoint left" + "\n------------------------------------" );
} else {
this.lives = this.lives - 1;
System.out.println(name + " took " + damage + " damage" + "\n------------------------------------" + "\n" + name +" lost a life" + "\n------------------------------------");
if (lives > 0) {
System.out.println(name + " revived" + "\n------------------------------------");
setHitPoints(remainingHitPoints + damage);
} else {
System.out.println(name + " is dead now RIP" + "\n------------------------------------");
setHitPoints(0);
}
}
}
在Vampire 类中,我重写了takeDamge 方法:
public void takeDamage(int damage) {
int inflictedDamage = damage/2;
int doubleHitPoints = getHitPoints()*2;
int remainingHitPoints = getHitPoints() - inflictedDamage;
int remainingLives = getLives() - 1;
if (remainingHitPoints > 0) {
setHitPoints(remainingHitPoints);
System.out.println(getName() + " took " + inflictedDamage + " damage(Vampire takes inflicted damage) and has " + remainingHitPoints + " HitPoint left" + "\n------------------------------------" );
} else {
setLives(remainingLives);
System.out.println(getName() + " took " + inflictedDamage + " damage(Vampire takes inflicted damage)" + "\n------------------------------------" + "\n" + getName() +" lost a life" + "\n------------------------------------");
if (remainingLives > 0) {
System.out.println(getName() + " revived and even got stronger!" + "\n------------------------------------");
setHitPoints(doubleHitPoints);
} else {
System.out.println(getName() + " is dead now RIP" + "\n------------------------------------");
setHitPoints(0);
}
}
}
我打算将对象的 hitPoints 加倍,它最初由构造函数设置。
当Vampire 对象受到足够的伤害而死时(换句话说,当它失去生命时),此方法成功地将对象的hitPoints 加倍。
当Vampire 对象受到的伤害不足以导致死亡时,问题就会发生(如果我诊断正确的话)。
setHitPoints(remainingHitpoints); 被执行,当Vampire 对象受到足够多的伤害而死时,它会将对象的remainingHitPoints 翻倍,而不是原来的hitPoints。
我想解决这个问题。
hitPoints 字段在Enemy 类中被声明为私有,所以如果我理解得很好,修改该字段值的唯一方法是在getHitPoint 类中使用getHitPoint 方法(getter) .
【问题讨论】:
标签: java oop inheritance constructor super