Как переопределить метод в подклассе и вызвать метод родительского класса без потери данных - PullRequest
0 голосов
/ 13 октября 2018

Это всего лишь второй раз, когда я использую это, и в первый раз я получил действительно хорошую помощь, поэтому я надеюсь, что смогу получить дополнительную помощь!

Справочная информация:

Моя программа проверяет мой класс Account, создавая объект, который содержит баланс и другие вещи.В инструкциях говорится, что мне нужно переопределить методы "Снятие" и "Депозит" в подклассе, чтобы отслеживать транзакцию.

Я сделал это, но он не использует текущий баланс, а вместо этого просто отправляет 0. Я хочу иметь возможность сохранить новый баланс, чтобы он фактически снимал или вносил средства из текущего баланса.

Извините, если это не имеет смысла, если требуется какое-либо разъяснение, я попытаюсь объяснить по-другому.

Ниже приведен мой фрагмент кода:

Примечание: Я не учел то, что уже работает (конструкторы и другие методы) , которое не имеет к этому никакого отношения:

Account.java

public class Account
{    
    private static double balance;

    public void Withdraw(double withdrawAmount)
    {
        this.balance -= withdrawAmount;
    }
    public void Deposit(double depositAmount)
    {
        this.balance += depositAmount;
    }
}

UserAccount.java

public class UserAccount extends Account
{
    private ArrayList<Transactions> transactions = new ArrayList();
    @Override
    public void Withdraw(double withdrawAmount)
    {
        super.Withdraw(withdrawAmount);
        Transactions thisTransaction = new Transactions('W', 
        withdrawAmount, this.AccBalance(), "Withdraw");
        this.transactions.add(thisTransaction);
    }
    @Override
    public void Deposit(double depositAmount)
    {
        super.Deposit(depositAmount);
        Transactions thisTransaction = new Transactions('D', 
        depositAmount, this.AccBalance(), "Deposit");
        this.transactions.add(thisTransaction);
    }
    public void fillTransactions(char type, double amount, double balance)
    {
        switch (type) {
            case 'D':
                this.Deposit(amount);
                break;
            case 'W':
                this.Withdraw(amount);
                break;
            default:
                System.out.println("ERROR fillTransactions");
                break;
        }
    }
    public static void main(String[] args) {
        ArrayList<Transactions> copyTransactions;
        UserAccount thisAccount = new UserAccount("George", 1122, 1000);
        thisAccount.MutAIR(.015);

        thisAccount.fillTransactions('D', 30, thisAccount.AccBalance());
        thisAccount.fillTransactions('D', 40, thisAccount.AccBalance());
        thisAccount.fillTransactions('D', 50, thisAccount.AccBalance());
        thisAccount.fillTransactions('W', 5, thisAccount.AccBalance());
        thisAccount.fillTransactions('W', 4, thisAccount.AccBalance());
        thisAccount.fillTransactions('W', 2, thisAccount.AccBalance());
}

Класс Transactions, который у меня естьсодержит тип (вывод или внесение) , сумму, которая снимается или вносится, и остаток.Что происходит, когда я вызываю суперкласс из переопределенных методов ввода или вывода, он устанавливает баланс в 0, поэтому он говорит, что баланс равен 50, или 40, или -5, когда я хочу получить исходный баланс с внесенной или выведенной валютой.

Если бы кто-нибудь мог помочь, это было бы удивительно!Я могу уточнить, если что-то смущает!Спасибо!

1 Ответ

0 голосов
/ 13 октября 2018

Эй, я думаю, вы не устанавливаете баланс в конструкторе UserAccount.Вот пример установки переменной Предположим, что класс A в качестве учетной записи и класс B в качестве UserAccount

class A {
  private double balance;// Don't use static
  public A(double balance) {// You will need this
      this.balance = balance;
  }
  public double getBalance() { return balance; }
}
class B extends A {
  public B(double balance) { 
      super(balance);//Important
  }
  public void d() { System.out.println(getBalance()); }
}
public class Main {
  public static void main(String args[]) {
    B b = new B(100.0);
    b.d();
  }
}

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

...