Вызов метода суперкласса из подкласса

Я моделирую банковский счет с помощью суперкласса 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{...}
Другие вопросы по тегам