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");
}
(请参见此处的类似示例:)