は私の抽象クラスです:Java - サブクラスのコンストラクタに1つのパラメータしか持たず、super()を呼び出す必要はありませんか?ここで
public abstract class BankAccount{
protected long balance;
public BankAccount(long balance){ \\<--Abstract class constructor
this.balance = balance;
}
... more stuff
}
私は、以下のサブクラス持っている(また、余分なサブクラスSavingsAccountを、どちらも自分の独立したバランスを持っているが、それは無関係ですです):
public class CurrentAccount extends BankAccount{
private int PIN;
private long overdraft = 0;
private long balance;
// Set balance and overdraft and the PIN
public CurrentAccount(long balance, long overdraft, int PIN){
super(balance);
this.overdraft = overdraft;
setPIN(PIN);
}
// Set balance and overdraft
public CurrentAccount(long balance, long overdraft){
super(balance);
this.overdraft = overdraft;
}
// Set overdraft only
public CurrentAccount(long overdraft){ \\<-- is it possible to have something like this?
super(balance);
this.overdraft = overdraft;
}
public void setPIN(int PIN){
if(PIN >= 0000 && PIN <= 9999){
this.PIN = PIN;
}
}
... more methods
}
することができますように上記から見ると、当座貸越を設定するコンストラクタが必要ですが、すべてのコンストラクタの開始時にスーパーを呼び出す必要があるため、現在のバランスが何であれ、渡すだけです。または、CurrentAccountサブクラスにバランス変数が必要ですか?
コンパイルjavaは私にこれを与えている:
CurrentAccount.java:41: error: cannot reference balance before supertype constructor has been called
super(balance);
^
1 error
任意の助けをいただければ幸いです。
引数のないコンストラクタを作成した場合、何もしないでください。無意味な変数を0に設定するなど、何か役に立たないようにすると、それは悪いプログラミングになりますか? – Physco111
@ Physco111:それはすべてデザインの問題です。初期残高を指定せずに 'BankAccount'を作成するのは意味がありますか?(デフォルトは0です)答えがイエスの場合は、0に初期化する引数なしのコンストラクタを指定することができます。 – Jack
ありがとう、あなたの答えは私に最も感謝しています。 – Physco111