2012-01-02 9 views
2

私は、サブクラスで正しいコンストラクタを使用して理解しようとしています。のは、コードのいくつかのビットから始めましょう:スーパークラスのコンストラクタについて

// creating an object 
account = new CreditAccount(accountNumber, personalNumber); 

// constructor in superclass Account 
public Account(int aNumber, int pNumber) { 
accountNumber = aNumber; 
personalNumber = pNumber; 
} 

// constructor in the subclass CreditAccount 
public CreditAccount(int aNumber, int pNumber) { 
super(accountNumber, personalNumber); 
} 

私は新しいオブジェクト、creditAccountを作成すると、私は、サブクラスでコンストラクタにaccountNumberpersonalNumberを送信します。しかし、私は正しいことをしていますか?スーパークラスのコンストラクタの内容を保持するために、サブクラスでsuperを使用するつもりですか?

サブクラスは、データ・クラスのメンバーとメソッドだけをコンストラクタではなくスーパークラスから継承するため、これを正しく行う方法が不思議です。

+0

メソッドの呼び出し方法を知るためにいくつかのsysoutを挿入しようとしましたか? – Muse

+1

コードが正しいように見えます。 「それはうまくいかない」とはどういう意味ですか?それはあなたが期待するものとは何か違うのですか? – Jesper

+0

コードは間違いなく正しく表示されます。 – Perception

答えて

9

あなたは働いていないものを指定していないので、私はそれが簡単なinvokationエラーであると仮定します。

public CreditAccount(int aNumber, int pNumber) { 
    super(accountNumber, personalNumber); 
} 

あなたは、派生クラスの入力されている関連parametrs、とsuper()を呼び出す必要があります`コンストラクタ:

public CreditAccount(int aNumber, int pNumber) { 
    super(aNumber, pNumber); 
} 
+0

Aha!それは少しのエラーが問題だったようですね!ですから、これを行うことで、スーパークラスコンストラクタの変数のように、サブクラスのconstrutorに何かを追加する必要はありません:accountNumber = aNumber;私がサブクラスでこれらの値を使用しているとき、どの変数を使用するのですか? accountNumberまたはaNumber? personalNumber = pNumber; ?? –

+0

@ 3D-kreativ:スーパークラスのコンストラクタで行われるすべては、 'super()'を呼び出すことによって行われます。この派生クラスに固有の追加の操作を行うだけです。あなたの例では、派生クラスのコンストラクタでpersonalNumberとaccountNumberを再度設定する必要はありません。 – amit

+0

OK、コードを試してみます。ありがとう! –

関連する問題