【1日45分×6日でわかる】オブジェクト指向 Day2: コンストラクタとフィールド

昨日はインスタンスを作ってから、`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分)

今日はコンストラクタを使い、インスタンス生成と同時にフィールドを初期化する方法を学びました。クラスがぐっと実用的になりました。明日は、フィールドを外部から勝手に触られないよう守る「カプセル化とアクセス修飾子」に進みます。

コメント

タイトルとURLをコピーしました