В настоящее время я узнаю о наследовании, и я немного смущен ограничениями, объявляющими, что метод final в суперклассе применяется к подклассам. Скажите, что у меня есть надбавка BankAccount с методом снятия денег, для которой требуется, чтобы пользовательский пароль и сумма были сняты, и устанавливает баланс счета (баланс - сумма). Я хотел бы объявить этот метод окончательным, так что другие подклассы не могли бы переопределить его и позволить клиенту снимать деньги без изменения баланса счета.Перейдите к окончательному методу в подклассе Java?
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.");
}
}
Вы сами дали ответ? Внедрите метод getOverDraftLimit в суперклассе со значением по умолчанию и переопределите его в подклассах, которые задают ограничение. – dunni
Почему бы просто не добавить атрибут 'allowedOverdraft' в' BankAccount' и пренебречь 'BankAccountOverdraft'? Другое решение - определить метод 'getAllowedOverdraft()' внутри 'BankAccount' (как не окончательный), который возвращает' '0''. Вы можете перезаписать этот метод в 'BankAccountOverdraft', чтобы вернуть, что вы хотите, чтобы он возвращался, и использовать его в методе' take (...) 'BankAccount'. – Turing85
Кстати, как учебное упражнение это прекрасно, но на самом деле такое ограничение бизнеса (с реальными деньгами на карту), вероятно, никогда не реализуется через наследование. Обычно у вас есть четкие бизнес-правила. – biziclop