2012-04-22 17 views
9

Javaの基本クラスのコンストラクタを呼び出す必要はありますか? C++ではオプションでしたので、私はこれを求めています。Javaの暗黙のコンストラクタとは何か

私はArrayAdapterを拡張するとき、私はこのエラーを取得:"Implicit super constructor ArrayAdapter<String>() is undefined. Must explicitly invoke another constructor"

ので、基本コンストラクタを呼び出すの目的は何ですか?オブジェクト基本クラスのコンストラクタを作成すると、&が呼び出されます。

+0

あなたはrrayAdapter ()コンストラクタを持っていないかもしれません。基本クラスにデフォルトコンストラクタを追加する場合は、それが問題ありません。 –

+0

関連:[Javaエラー:暗黙のスーパーコンストラクタはデフォルトのコンストラクタでは未定義です。](http://stackoverflow.com/questions/1197634/java-error-implicit-super-constructor-is-undefined-for-default-constructor) – Lion

+0

これは、DerivedClass(int x、int y)のようなものです:BaseClass(y)、in C++ ???右??また、もう1つの疑問は、上記のメカニズムでは、基本クラスのコンストラクタクラスを2回または1回ですか? – Naruto

答えて

10

引数なしのコンストラクタは、自分で呼び出さない場合は暗黙的に呼び出されます。コンストラクタが存在しない場合は無効です。スーパーコンストラクタを呼び出す必要があるのは、スーパークラスが通常、サブクラスに設定できないプライベート変数を含む、構築後に期待される状態があるからです。コンストラクタを呼び出さないと、オブジェクトがおそらく無効な状態になり、あらゆる種類の問題を引き起こす可能性があります。

+0

これは、DerivedClass(int x、int y)のようなものですか?BaseClass(y)、in C++ ???右?? もう1つの疑問は、上記のメカニズムでは、ベースクラスのコンストラクタクラスを2回または1回ですか? – Naruto

+0

はい、そうです。 Javaでは、コンストラクタ内の1つのコンストラクタ(基本クラスまたは現在のクラスの別のコンストラクタへの転送)のみを呼び出すことができるため、基本クラスコンストラクタは1回しか呼び出すことができません。 – ricochet1k

0

スーパークラスの引数なしコンストラクタを呼び出す必要はありません。あなたはスーパーキーワード以下のショーのような引数を持つコンストラクタ、ユーザーを呼び出したい場合:

super(arg1, ...); 
+0

"スーパークラスの引数なしコンストラクタを呼び出す必要はありませんが、Javaは呼び出しを挿入しますか?" –

関連する問題