Java 阻止构造子类的未知错误
这是我的超类:Java 阻止构造子类的未知错误,java,Java,这是我的超类: public abstract class BankAccount { private String name; private double balance; final int OVERDRAFT_FEE = 35; private static int accountNum=0; public BankAccount(String name) { this.name=name; balance=
public abstract class BankAccount
{
private String name;
private double balance;
final int OVERDRAFT_FEE = 35;
private static int accountNum=0;
public BankAccount(String name)
{
this.name=name;
balance=0;
accountNum++;
}
//various methods omitted
public abstract void endOfMonth();
public String toString(BankAccount account)
{
return "Account Name: "+name+"\nBalance: $"+balance+"\nAccount Number: "+accountNum;
}
}
下面是我的子类:
public class CheckingAccount extends BankAccount
{
final int TRANSACTION_LIMIT = 3;
final int MINIMUM_BALANCE = 50;
final int FEE = 10;
private int transactionCount;
// various methods omitted
public void endOfMonth()
{
if(transactionCount>TRANSACTION_LIMIT)
{
int extra = transactionCount-TRANSACTION_LIMIT;
int extra_fee = FEE*extra;
super.setBalance((super.getBalance)-extra_fee);
}
if(super.getBalance()<MINIMUM_BALANCE)
{
super.setBalance((super.getBalance)-FEE);
}
}
}
公共类CheckingAccount扩展了BankAccount
{
最终整数交易限额=3;
最终整数最小余额=50;
最终积分费=10;
私有int事务计数;
//省略了各种方法
公共无效月底()
{
if(交易计数>交易限额)
{
int extra=交易计数-交易限额;
int extra_fee=费用*额外;
super.setBalance((super.getBalance)-额外费用);
}
如果(super.getBalance()因为super类的默认构造函数不存在,请在默认情况下被调用的BankAccount
中添加一个默认构造函数,或者调用super类的正确版本的构造函数您的父类构造函数被声明为
public BankAccount(String name)
换句话说,它需要一个字符串参数
通过不显式地为CheckingAccount
类提供构造函数,Java编译器创建了一个
public CheckingAccount() {
super();
}
换句话说,它不向父构造函数提供任何参数
您需要更改它。使用适当的参数声明构造函数并将其传递给父级
public CheckingAccount(String name) {
super(name);
}
在Java中,当您在具有参数的抽象类中声明构造函数时,所有子类都需要声明此构造函数。您可以将构造函数添加到CheckingAccount
:
class CheckingAccount extends BankAccount {
public CheckingAccount(String name){
super(name) //calling the BankAccount constructor.
}
}
默认情况下,您的子类将尝试调用其父类的默认构造函数,但您尚未提供它。有两种方法可以解决此问题:
1) 将默认构造函数添加到父类(public BankAccount()
无参数)
2) 从子类显式调用父构造函数:
public ChildAccount() {
super("Checking Account");
}
(请参见此处的类似示例:)