Вызов метода суперкласса из подкласса
Я моделирую банковский счет с помощью суперкласса Account
и подкласс SavingsAccount
это не может быть отменено. makeWithdrawal()
Метод, вызванный из основного класса, должен проверить, больше ли снятие, чем остаток, и запросить ввод, а затем отредактировать баланс.
Как я могу позвонить makeWithdrawal()
метод из Account
и переопределить его в SavingsAccount
используя супер ключевое слово? Мой компилятор выдает мне сообщение об ошибке: несовместимые типы: отсутствует возвращаемое значение.
Метод в Account
:
double makeWithdrawal(double withdrawal) {
return balance -= withdrawal;
}
(Довольно просто.) Этот метод изначально был абстрактным, но вызывал ошибки.
Метод в SavingsAccount
:
public double makeWithdrawal(double withdrawal) {
double tempbalance = getBalance();
if (withdrawal > getBalance()) {
withdrawal = Input.getDouble("Your withdrawal cannot be larger than your balance. Enter a withdrawal <= "+getBalance());
return;
}
else {
return super.makeWithdrawal(withdrawal);
}
}
4 ответа
Проблема с
вернуть;
Вы должны заменить его на
возвратный вывод средств;
public double makeWithdrawal(double withdrawal) {
double tempbalance = getBalance();
if (withdrawal > getBalance()) {
withdrawal = Input.getDouble("Your withdrawal cannot be larger than your balance. Enter a withdrawal <= "+getBalance());
return withdrawal;
}
else {
return super.makeWithdrawal(withdrawal);
}
}
Проблема не в вашем звонке super.makeWithdrawl()
, что правильно. Это с пустым return
заявление в if
пункт выше этого. Ваша логика получения обновленной суммы вывода разумна, но вам нужно вернуть новый баланс, когда вы это сделаете. Я бы порекомендовал просто переместить звонок на super.makeWithdrawl()
вне условий:
if(withdrawal > getBalance()) {
withdrawal = Input.getDouble("Your withdrawal cannot be larger than your balance. Enter a withdrawal <= "+getBalance());
}
return super.makeWithdrawal(withdrawal);
При этом будет использоваться обновленная сумма вывода, если исходная сумма была слишком большой.
В случае
if (withdrawal > getBalance()) {
withdrawal = Input.getDouble("Your withdrawal cannot be larger than your balance. Enter a withdrawal <= "+getBalance());
return;
}
вам нужно вернуть двойное значение, а не простой возврат.
Если я вас правильно понял
Учетная запись является базовым классом, а SavingsAccount - подклассом?
затем: super.makeWithdrawal(withdrawal);
также убедитесь, что вы наследуете при определении класса:
public class SavingsAccount extends Account{...}