В вашем коде даже не должно быть метода setGeneralPower()
.
Вместо этого предоставьте классу метод получения, 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();
}
В противном случае, если вы забудете вызвать установщик (не-сеттер, действительно), метод дает неверный ответ.Таким образом, возвращаемое значение гарантированно будет обновленным и правильным.
Относительно вашего обновления:
Причиной наличия setGeneralPower()
являетсяустановите значение атрибута generalPower
.
Снова НЕ присвойте классу поле generalPower ипроблема решена.
Опять же, помните, что общая мощность может измениться в случае изменения силы защиты или атаки, поэтому вы должны защитить свой код от этого.Если кодировщик, который использует этот класс - кто-то другой или ваше будущее само - забывает вызвать этого установщика прямо перед получателем, у них большие проблемы.
Обратите внимание, что даже без ageneralPower поле остается атрибутом или свойство класса, вычисляемым, но действительным (и безопасным ).