2013-05-06 19 views
11

です。 "superへの呼び出しはコンストラクタの最初のステートメントでなければなりません"というエラーが発生し続けます。スーパーへの呼び出しはコンストラクタの最初のステートメントでなければなりませんが、それは

問題は、で、私のコンストラクタの最初の文です。

public void CheckingAccountCustomer(int a){ 
    super(n, p, b); 
    accountNo = a; 
} 

これも私のスーパークラスです。

public void customer(String n, int p, double b){ 
    name = n; 
    pin = p; 
    balance = b; 
} 

私はここで間違っていますか?

+2

ここで興味深いのは、これらはコンストラクタではないので、 'super()'を呼び出すと、子クラスのメソッドの中から親クラスのコンストラクタを呼び出そうとしていることです。エラーメッセージは、 "その子のコンストラクタの最初の行ではありません。それは本当ですが、ひどく役に立ちません。 「コンストラクタではないスーパーに電話する」というメッセージがいいかもしれません。 –

+0

私は間違いなくこれを迅速に解決することを期待していませんでした。もちろん、それは私が見えないほど盲目だった単純な修正でした。しかし、まだ、皆に感謝します。 –

答えて

30

このコード

public void customer(String n, int p, double b){ 

は、コンストラクタではありません。コンストラクタには戻り値の型はありません。 void。あなたのクラス名と仮定するとcustomerです:

public customer(String n, int p, double b){ 

これはあまりにもCheckingAccountCustomerに適用されます。

+1

それはそれを修正しました。ありがとうございました。 –

+0

'customer'(小さなCを持つ)は有効なクラス名ですが、それはぶつかることに注意してください。規約では、クラス名は大文字( 'Customer')で始まり、メソッド名は小文字で始まらなければなりません。 – ADTC

8
public void CheckingAccountCustomer(int a){ 

戻り値の型がvoidであるため、コンストラクタではありません。それはクラスと同じ名前の単なるメソッドです。戻り値の型を取り除く。

public CheckingAccountCustomer(int a){ 
+6

「あなたはコンストラクタと呼んでいますか?これはコンストラクタです!」という文言を変更するだけで、これまでに与えたすべての回答に投票します。 – christopher

+0

ああ...うわー、今私は盲目になります。 –

+1

@ChrisCooney:私はあなたと同じくらい賢いと思うよ! :) –

3
public void CheckingAccountCustomer(int a) 

これは戻り値の型を持つため、コンストラクタではありません。

2

コンストラクタが、それは戻り値の型を変更するユーザーをできるようになるならば、それは意味をなさないので、そのクラスのインスタンスを作成するために使用されている(それはあまりにも危険なことができます)。そのため、コンストラクタにはがありません。戻り値の型です。

他の人が既に回答しているので、戻り値の型を削除すると、コンストラクタになります。

2

コンストラクタは何も返されません(voidまたはObject型)。

public void CheckingAccountCustomer(int a){ 
    super(n, p, b); 
    accountNo = a; 
} 

はコンストラクタではありません。

関連する問題