java - 如何覆盖子类中的方法并调用父类方法而不丢失数据
问题描述
这只是我第二次使用它,也是我第一次得到很好的帮助,所以我希望我能得到更多帮助!
背景:
我的程序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。
如果有人可以提供帮助,那就太棒了!我可以澄清是否有任何令人困惑的地方!谢谢!
解决方案
嘿,我认为您没有在 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 都有单独的余额。
推荐阅读
- python - Python,Selenium“::after”在抓取时出现问题
- python - 使用 nbconvert 从 Jupyter 导出为 pdf 时,如何显示宽表的所有 DataFrame/表列?
- android - CameraX 和 MultiCamera 支持
- c - 我正在尝试使用动态内存为使用结构的两个数组分配内存
- python - pandas 到带有格式的 html
- python - 删除数组中具有不同内部元素的重复项
- python - Python Gensim 字典
- html - 在较小的视口宽度处将 4 个 div 对齐为每行 2 个
- python - 在 pandas 数据框标头中删除一个级别
- git - 恢复旧的合并提交文件而不影响后续提交