2011-11-15 10 views
0

次のコードはテストプログラムです。このプログラムでなぜA(int a)を使うことができないのですか?スーパークラスのjavaコンストラクタ

public class A { 
    int a; 
    void meth(int b) { 
     a+=b; 
    } 
    A(int a) { 
     this.a=a; 
    } 
} 

class B extends A { 
    int a; 
    void meh2(int b) { 
     a+=b; 
    } 
} 

なぜパラメータをコンストラクタに渡すことができないのですか?何故? Netbeansのエラーメッセージ:

tma1.AクラスのコンストラクタAは、指定された型には適用できません。 必須:int found:引数なし 理由:実際の引数リストと正規の引数リストの長さが異なる

+1

なぜあなたはできませんか?あなたがしようとしているように見えません... –

+2

"メソッド"の解体: 'メソッド' - 'meth' - >' meh2' –

答えて

2

クラスBでは、コンストラクタが必要です。あなたがBからAを呼び出すことができないということを意味するならば、それはクラスAを拡張するだけなので、スーパークラスを参照するsuperを使う必要があります。例えば、Bは次のようになります。

class B extends A { 
    B(int a) { 
//You can put additional code here 

// This calls the constructor of A 
     super(a); 

//You can put additional code here 
    } 
    int a; 
    void meh2(int b) { 
     a+=b; 
    } 
} 

クラスが定義されたコンストラクタを持っていない限り、あなたはそれが自動的に、コード

+0

ありがとう、なぜクラスAのコンストラクタでint大丈夫だろう? – hkguile

+0

Javaは暗黙的に "classname()"のようなデフォルトコンストラクタを作成するためです。そのため、Aのコンストラクタにいくつかのパラメータを渡すと、デフォルトのコンストラクタはそのコンストラクタと一致せず、明示的に1を指定する必要があります。 –

1

で何かを省略していないそうでない場合、あなたは、クラスBでの変数aに何かを割り当てる必要があります単にsuper()を呼び出す引数のないコンストラクタがあります。

あなたのコンパイラからの苦情は、次のようであると思われます。「あなたが見ることができない、引数なしのコンストラクタは、存在しない親の引数なしのコンストラクタを呼び出しています。

クラスAには、引数なしのコンストラクタがありません。定義済みのコンストラクタがもう1つあります(javaで作成する必要がないため)。

関連する問題