我想寫一個子類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;
}
}
問題是,如果你沒有調用super,Java將會隱式地調用它而沒有參數。因爲你的超類沒有沒有參數的構造函數,所以它不會起作用... – Li357
你的'SavingsAccount'類有_two different_'id'字段和_two different_'balance'字段。這幾乎肯定不是你想要的。 –
如果您沒有提供構造函數,編譯器將爲您創建一個不帶參數的構造函數(並且不帶參數調用超類構造函數)。然而它不起作用,因爲你的超類已經包含一個非空的構造函數(所以編譯器不會爲你創建一個)。所以簡單地說,你需要創建一個適當的構造函數來調用適當的超類構造函數(正如Elliott的答案所示)。 – Jyr