昨日はインスタンスを作ってから、`dog1.name = “ポチ”` のように後から値を入れていました。今日は、インスタンスを作る瞬間にまとめて値をセットする「コンストラクタ」を学びます。45分で、フィールドとコンストラクタの関係を理解し、より実用的なクラスを作ります。時間配分の目安は、説明10分、実践27分、振り返り8分です。
フィールドとコンストラクタ(目安10分・インプット)
フィールドは、クラスが持つデータのことです。そしてコンストラクタとは、インスタンスが作られるとき(`new` のとき)に自動で呼ばれる、初期化専用のメソッドです。コンストラクタはクラス名と同じ名前で、戻り値の型を書かないのが特徴です。
public class Dog {
String name;
int age;
Dog(String name, int age) { // コンストラクタ
this.name = name;
this.age = age;
}
void intro() {
System.out.println(name + "・" + age + "歳");
}
}
`this` は「このインスタンス自身」を指します。`this.name` はフィールドの name、右側の name は引数の name で、両者を区別するために使います。
【実践】コンストラクタでまとめて初期化(目安27分・手を動かす)
上の `Dog.java` と、次の `Main.java` を作って実行しましょう。
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("ポチ", 3); // 作ると同時にセット
dog.intro();
Dog dog2 = new Dog("ハチ", 5);
dog2.intro();
}
}
`javac Main.java` → `java Main` で実行します。昨日のように1行ずつ値を入れなくても、`new Dog(“ポチ”, 3)` の一行で名前と年齢が同時にセットされます。演習として、`String breed`(犬種)フィールドを追加し、コンストラクタと intro も3項目に対応させてみましょう。
よくある疑問・つまずきポイント
**thisは必ず必要ですか?**
引数名とフィールド名が同じときに区別のため必要です。名前が違えば省略もできますが、`this` を付けておくと「これはフィールドだ」と明確になり読みやすくなります。
**コンストラクタに戻り値の型を書いてしまいエラーになります。**
コンストラクタには `void` も含め戻り値の型を書きません。クラス名と同名にする点も忘れずに。
まとめ(目安8分)
今日はコンストラクタを使い、インスタンス生成と同時にフィールドを初期化する方法を学びました。クラスがぐっと実用的になりました。明日は、フィールドを外部から勝手に触られないよう守る「カプセル化とアクセス修飾子」に進みます。

コメント