В данный момент я изучаю наследование, и меня немного смущают ограничения, которые накладывают объявление метода final в суперклассе на подклассы. Скажем, у меня есть суперкласс BankAccount с методом вывода, который требует вывода пароля пользователя и суммы и устанавливает баланс счета на (баланс - сумма). Я хотел бы объявить этот метод окончательным, чтобы другие подклассы не могли его переопределить и позволить клиенту снимать деньги без изменения баланса счета.
public final void withdraw(double amount, String pass) {
if (checkPassword(pass) && getBalance() >= amount;) {
setBalance(getBalance() - amount);
} else {
System.out.println("Rejected.");
}
}
Я хочу, чтобы что-то подобное не было разрешено:
public void withdraw(double amount, String pass) {
}
Однако некоторые банковские счета допускают овердрафты, которые также необходимо учитывать при снятии средств. Теперь, если у меня есть подкласс BankAccountOverdraft, унаследованный метод вывода является окончательным, поэтому я не смогу изменить какие-либо его части. Но все же Я ДОЛЖЕН учитывать лимит овердрафта в подклассе? Как я могу это сделать?
public void withdraw(double amount, String pass) {
if (checkPassword(pass) && getOverDraftLimit() + getBalance() >= amount) {
setBalance(getBalance() - amount);
} else {
System.out.println("Rejected.");
}
}
allowedOverdraft
кBankAccount
и не игнорироватьBankAccountOverdraft
? Другим решением было бы определить методgetAllowedOverdraft()
вBankAccount
(как не окончательный), который возвращает0
. Вы можете перезаписать этот метод вBankAccountOverdraft
, чтобы вернуть то, что вы хотите, и использовать его вwithdraw(...)
методеBankAccount
. - person Turing85   schedule 14.11.2015getOverDraftLimit
вBankAccount
make сBankAccountOverdraft
и использованием наследования в целом бессмысленна? Я не хочу, чтобы у всех подклассовBankAccount
был овердрафт ... - person jack   schedule 14.11.2015getOverDraftLimit
final
со значением 0, а затем ограничивает клиентов только его подклассами. Это не бессмысленно, но наследование в то же время не лучший инструмент для обеспечения соблюдения правил. См. Отражение. - person zapl   schedule 14.11.2015