1 回答
TA贡献1801条经验 获得超8个赞
您的代码甚至不应该有setGeneralPower()方法。
相反,给类一个 getter 方法,public double getGeneralPower()计算并返回适当的值。使它成为一个计算属性,一个在需要时调用适当的可覆盖方法的属性。
例如。,
public abstract class Player {
private double attackPower;
private double defensePower;
// **** get rid of this and make it a calculated property
// private double generalPower;
public double getGeneralPower() {
return 100 * getAttackPower() + getDefensePower();
}
否则,如果您忘记调用 setter(实际上是非 setter 方法),该方法会给出错误的答案。这样,可以保证返回值是最新的和正确的。
关于您的更新:
之所以有一个setGeneralPower()是为了设置属性的值generalPower。
再次 不要给班级一个 generalPower 领域,问题就解决了。
再次记住,如果防御力或攻击力发生变化,一般力量有可能发生变化,因此您必须保护您的代码免受这种情况的影响。如果使用这个类的编码员——其他人或你未来的自己——忘记在调用 getter 之前调用 setter,他们就会有大麻烦。
请注意,即使没有generalPower字段,它仍然是类的一个属性或特性,一个计算的,但是一个有效的(和安全的)。
添加回答
举报
