подкласс и суперкласс в Java - PullRequest
0 голосов
/ 08 марта 2020

здесь я попытался создать подкласс BasicAccount из суперкласса BankAccount. При создании метода снятия, который не будет выводить больше денег, чем в настоящее время имеется на счете.

Но я все еще не понимаю, почему я не могу получить к нему доступ в BasicAccount, хотя переменная является закрытой в BankAccount. Любая идея о том, как получить доступ к балансу в моем методе вывода средств, оставив поле баланса закрытым?

/**
 A bank account has a balance that can be changed by
 deposits and withdrawals.
 */
class BankAccount
{
    private double balance;

    /**
     Constructs a bank account with a zero balance.
     */
    public BankAccount()
    {
        balance = 0;
    }

    /**
     Constructs a bank account with a given balance.
     @param initialBalance the initial balance
     */
    public BankAccount(double initialBalance)
    {
        balance = initialBalance;
    }

    /**
     Deposits money into the bank account.
     @param amount the amount to deposit
     */
    public void deposit(double amount)
    {
        double newBalance = balance + amount;
        balance = newBalance;
    }

    /**
     Withdraws money from the bank account.
     @param amount the amount to withdraw
     */
    public void withdraw(double amount)
    {
        double newBalance = balance - amount;
        balance = newBalance;
    }

    /**
     Gets the current balance of the bank account.
     @return the current balance
     */
    public double getBalance()
    {
        return balance;
    }
}
    class BasicAccount extends BankAccount{


    BasicAccount(double initialBalance) {

    }


        public void withdraw(double amount) {
            if (amount > 0 && this.balance - amount >= 0) {
                super.getBalance() -= amount;
            } else if (amount < 0) {
                throw new IllegalArgumentException("Withdraw amount should be positive and greater than 0.");
            } else {
                System.out.println("Error: Withdraw amount exceeds available funds.");
            }
        }



}

class Main {
    public static void main(String args[]) {
        BankAccount account = new BasicAccount(100.00);
        double balance = account.getBalance(); //expected 100.00;

        account.withdraw(80.00);
        balance = account.getBalance(); //expected 20.00;

        account.withdraw(50.00);
        balance = account.getBalance(); //expected 20.00 because the amount to withdraw is larger than the balance
    }
}

Ответы [ 2 ]

1 голос
/ 08 марта 2020

Вам нужно вызвать super.withdraw (double) из подкласса.

Также

super.getBalance() -= amount;

Это ничего не значит. Вы не можете вычесть и присвоить значение методу, только переменной. Это не логично. Замените на то, что я сказал, super.withdraw (сумма).

Также

в BasicAccount # изъять, у вас есть this.balance, но вы хотите сказать super.balance, потому что этот класс, BasicAccount, не определяет члена класса баланса, однако супер класс BankAccount делает.

Также

        BasicAccount(double initialBalance) {

        }

Вам нужно вызвать super (initialBalance), потому что сейчас вы не вызываете супер конструктор, который назначает баланс.

        BasicAccount(double initialBalance) {
            super(initialBalance);
        }

Также (oof)

        public BankAccount() {
            balance = 0;
        }

Вместо создания конструктора по умолчанию, который делает то же самое, что и другой, либо удалите его, так как баланс 0 по умолчанию, или вызовите другой конструктор, который имеет цель.

        public BankAccount() {
            this(0);
        }

Теперь ваш начальный конструктор баланса может выполнить некоторые полезные проверки крайнего случая, от которых выигрывает конструктор no-args.

    public BankAccount(double initialBalance) {
        if (initialBalance < 0) {
            throw new IllegalArgumentException("Initial balance cannot be below zero.");
        }
        balance = initialBalance;
    }

0 голосов
/ 08 марта 2020

Если вы хотите получить доступ к полю суперкласса из подкласса, вы должны объявить его защищенным, а не закрытым. После этого вы сможете получить к нему доступ super.variableName.

Также посмотрите, что написал @Jason, он указал на другие ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...