Java错误:Transaction构造函数不匹配,如何实现双参ZeroBalance子类?
解决Transaction构造函数不匹配问题,实现ZeroBalance类
别担心,这是Java子类继承构造函数时的常见坑,我一步步给你讲明白怎么写:
首先明确错误根源:当你继承抽象类Transaction时,如果父类没有无参构造函数,Java不会自动给子类生成无参构造,而且子类的构造函数必须显式调用父类的构造方法。你遇到的报错,就是因为ZeroBalance没有定义能匹配父类构造参数的构造函数。
先假设你的抽象类Transaction大致是这个结构(如果和你的实际代码有出入,调整参数对应即可):
import java.util.Date; public abstract class Transaction { protected Account account; protected Date transactionDate; protected double amount; // 父类的构造函数,三个参数 public Transaction(Account account, Date transactionDate, double amount) { this.account = account; this.transactionDate = transactionDate; this.amount = amount; } // 必须由子类实现的抽象方法 public abstract void adjustAccount(); }
接下来是ZeroBalance类的完整实现,完全符合你的需求:
import java.util.Date; public class ZeroBalance extends Transaction { // 仅接收两个参数的构造函数 public ZeroBalance(Account account, Date transactionDate) { // 必须调用父类的构造函数,这里给amount传0(反正我们用不上它) super(account, transactionDate, 0.0); } // 实现adjustAccount方法,将账户余额设为0 @Override public void adjustAccount() { // 假设Account类有setBalance方法,如果是protected成员变量也可以直接赋值 account.setBalance(0.0); // 如果是直接访问成员变量:account.balance = 0.0; } // 重写toString,完全不提及amount @Override public String toString() { return "ZeroBalance Transaction: Date = " + transactionDate + ", Account = " + account.getAccountId(); // 这里的account.getAccountId()换成你实际的账户标识方法,比如account.toString() } }
关键细节说明:
- 构造函数部分:因为父类
Transaction只有带三个参数的构造方法,所以我们在ZeroBalance的构造里必须用super()调用它,传入前两个必要参数,第三个amount随便传个值(比如0.0)就好——反正这个类根本不会用到这个参数。 - adjustAccount方法:严格按照需求把账户余额设为0,这里要根据你
Account类的实际写法调整(用setter方法或者直接访问成员变量)。 - toString重写:完全避开
amount字段,只展示这个交易的核心信息:交易日期和关联账户。
这样写之后,你之前的构造函数不匹配错误就会消失,而且完全满足所有需求啦!
内容的提问来源于stack exchange,提问作者ga111
相关产品推荐
相关产品推荐

