2007.03.19

デフォルトコンストラクタ

Javaでは、クラスにコンストラクタが宣言されていない時、
コンパイラによって、引数を取らない親クラスのコンストラクタを呼び出す、
デフォルトコンストラクタが自動的に作成されます。

Class SuperSample extends Object {

  SuperSample(int i) {
    //処理
  }
}

Class Sample extends SuperSample {

}

この場合、Sampleクラスは以下のコードと同じ意味になります。

Class Sample extends SuperSample {

  Sample() {
    super();
  }
}

SuperSampleクラスにはコンストラクタがあるので、
デフォルトコンストラクタは作成されません。
一方、Sampleクラスにはコンストラクタが存在しないので、
デフォルトコンストラクタが作成されます。
ですが、super()の呼び出しに対して、SuperSampleクラスには
引数を取らないコンストラクタが存在しないため、
コンパイルエラーが発生します。
このようなコードの記述はなるべく避けましょう。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
osano