2016-12-03 4 views
3

は私の抽象クラスです: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 

任意の助けをいただければ幸いです。

答えて

2

親クラスがデフォルト(引数なし)コンストラクタを持っていない場合、これは設計によってはクラスがbalance値で初期化されなければならないことを意味しています。

これは、既定値(例:super(0))で初期化しない限り、行っていることを行う方法がないことを意味します。

エラーは、実際に構築する前にスーパークラスのフィールドにアクセスしていることによってエラーが発生します。これは、サブクラスで最初に行う必要があることです。

+0

引数のないコンストラクタを作成した場合、何もしないでください。無意味な変数を0に設定するなど、何か役に立たないようにすると、それは悪いプログラミングになりますか? – Physco111

+2

@ Physco111:それはすべてデザインの問題です。初期残高を指定せずに 'BankAccount'を作成するのは意味がありますか?(デフォルトは0です)答えがイエスの場合は、0に初期化する引数なしのコンストラクタを指定することができます。 – Jack

+0

ありがとう、あなたの答えは私に最も感謝しています。 – Physco111

-3

オブジェクトが構築されない限り、デフォルト値を設定時に設定して、のスタティックにするか、前に明示的に設定したい場合は変数にデフォルト値を設定しません。

+0

質問には答えません。 – EJP

+0

@EJP - メモとして、ここで編集:http://stackoverflow.com/posts/40950921/revisionsかなり幼稚だった。もう一度そのようなことはしないでください。 –

関連する問題