首页 > 解决方案 > 如何覆盖子类中的方法并调用父类方法而不丢失数据

问题描述

这只是我第二次使用它,也是我第一次得到很好的帮助,所以我希望我能得到更多帮助!

背景:

我的程序Account通过创建一个持有平衡和其他东西的对象来测试我的类。说明说我需要重写子类的“Withdraw”“Deposit”方法以跟踪交易。

我这样做了,但它不使用当前余额,而只是发送一个 0。我希望能够保留新余额,以便它实际上从当前余额中提取或存款。

对不起,如果这没有意义,如果需要任何澄清,我会尝试以不同的方式解释。

下面是我的代码片段:

注意:我保留了与此无关的已经起作用的东西(构造函数和其他方法) :

账户.java

public class Account
{    
    private static double balance;

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

用户帐户.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。

如果有人可以提供帮助,那就太棒了!我可以澄清是否有任何令人困惑的地方!谢谢!

标签: javamethodsoverridingsuper

解决方案


嘿,我认为您没有在 UserAccount 的构造函数中设置余额。
这是设置变量 Assume class A as Account 和 class B as 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();
  }
}

如果你在超类中使用静态余额,那么只有一个实例将用于所有对象,因为我猜你希望每个 UserAccount 都有单独的余额。


推荐阅读