Java学習者が最初につまずきやすいポイントのひとつに「コンストラクタとデフォルトコンストラクタの関係」があります。
今回は実際のコード例を交えながら、この仕組みを整理してみましょう。
デフォルトコンストラクタとは?
Javaでは、コンストラクタを1つも定義しなかった場合のみ、コンパイラが自動的に「引数なしコンストラクタ」を生成してくれます。これを「デフォルトコンストラクタ」と呼びます。
ところが、1つでも自分でコンストラクタを定義すると、デフォルトコンストラクタは自動的には作られません。
ここで混乱が起こりやすいのです。
例:コンパイルエラーになるケース
次のコードを見てください。
class Monster {
// 引数付きコンストラクタを定義
Monster(String type) {
System.out.println("Monster type: " + type);
}
}
public class Main {
public static void main(String[] args) {
// 引数なしで生成しようとする
Monster m = new Monster(); // ★ エラー
}
}
実際のエラー内容
上のコードをコンパイルすると、エラーになります。
つまり、コンパイラは「Monster()という引数なしコンストラクタは存在しない」と教えてくれています。
なぜこうなるのか?
Monster(String type) という 引数ありのコンストラクタを定義したため、
コンパイラは デフォルトコンストラクタ(引数なし)を自動生成しない。
その状態で new Monster() を書くと、存在しないメソッドを呼び出そうとするのでコンパイルエラーになる。
正しい解決方法
もし引数なしの生成方法も用意したいなら、明示的に自分でコンストラクタを追加する必要があります。
class Monster {
// 引数付き
Monster(String type) {
System.out.println("Monster type: " + type);
}
// 明示的に引数なしコンストラクタを定義
Monster() {
System.out.println("Default monster created");
}
}
public class Main {
public static void main(String[] args) {
Monster m1 = new Monster("Dragon"); // Monster type: Dragon
Monster m2 = new Monster(); // Default monster created
}
}
まとめ
デフォルトコンストラクタは「コンストラクタを1つも定義していないときだけ」自動生成される。
1つでも自分でコンストラクタを定義したら、デフォルトは作られない。
引数なしで生成したいなら、自分で書かなければならない。
この仕組みを理解していないと、Java学習の序盤で「なぜコンパイルエラーになるの?」と混乱しやすいポイントです。
覚えておけば、Bronzeレベルの試験でも現場でも安心して対応できます。