我正在尝试为扩展超类SavingsAccount
的子类Account
编写构造函数。帐户已有一个带有两个参数(id
和balance
)的构造函数。 SavingsAccount
的构造函数与Account
的构造函数非常相似,但我需要以不同方式验证balance
,因此我不想将super(String id, int balance)
用于构造函数。
当我尝试创建一个新的构造函数时,我的IDE告诉我“'Account'中没有可用的默认构造函数”。我不明白为什么当我在SavingsAccount中编写新的构造函数时,它告诉我需要一个默认构造函数。
我是否需要实际编写默认构造函数?或者我当前的构造函数中有什么东西不太正确吗?
超类:
public class Account extends Bank {
String id;
int balance;
Account(String id, int balance){
if(balance < 0)
throw new IllegalArgumentException("Balance cannot be less than 0.00");
this.id = id;
this.balance = balance;
}
子类:
public class SavingsAccount extends Account {
String id;
int balance;
SavingsAccount(String id, int balance){
if(balance < 1000)
throw new IllegalArgumentException("Balance cannot be less than 10.00");
this.id = id;
this.balance = balance;
}
}
答案 0 :(得分:0)
构造函数的第一行需要调用相应的超级构造函数。添加super(id, balance);
之类的
SavingsAccount(String id, int balance){
super(id, balance);
将验证balance
是否大于0
,然后验证balance
是否大于10
。或者,将空构造函数添加到Account
Account() {
}
然后将使您的子类实例化(因为编译器会向super()
插入一个空调用)。请注意,这是一个空构造函数,只有在未定义任何构造函数时才会添加默认构造函数。
答案 1 :(得分:0)
仅供参考,我们需要from the java docs from Oracle
注意:如果构造函数没有显式调用超类构造函数,Java编译器会自动插入对超类的无参数构造函数的调用。如果超类没有无参数构造函数,则会出现编译时错误。对象确实有这样的构造函数,因此如果Object是唯一的超类,则没有问题。