011 コンストラクタ(コンストラクタを呼び出す) 006 解答例

public class Animal {
    private String species;
    private int age;

    // デフォルトコンストラクタ
    public Animal() {
        this("Unknown", 1); // 別のコンストラクタを呼び出す
    }

    // 引数つきコンストラクタ1
    public Animal(String species) {
        this(species, 1); // 別のコンストラクタを呼び出す
    }

    // 引数つきコンストラクタ2
    public Animal(String species, int age) {
        this.species = species;
        this.age = age;
    }

    // ゲッターメソッド(省略)

    // mainメソッド
    public static void main(String[] args) {
        // デフォルトコンストラクタが呼び出される
        Animal animal1 = new Animal();
        System.out.println("Animal1: Species = " + animal1.getSpecies() + ", Age = " + animal1.getAge());

        // 引数つきコンストラクタが呼び出される
        Animal animal2 = new Animal("Lion");
        System.out.println("Animal2: Species = " + animal2.getSpecies() + ", Age = " + animal2.getAge());

        // 別の引数つきコンストラクタが呼び出される
        Animal animal3 = new Animal("Elephant", 10);
        System.out.println("Animal3: Species = " + animal3.getSpecies() + ", Age = " + animal3.getAge());
    }
}

この例では、Animal クラス内に main メソッドが追加され、その中で Animal クラスのオブジェクトを生成しています。各オブジェクトの状態が正しく表示されるかどうかを確認することができます。

コンストラクタチェーン

「コンストラクタチェーン」は、同じクラス内で異なるコンストラクタがお互いを呼び出す仕組みを指します。これにより、コンストラクタの共通した初期化処理を効率的に再利用できます。以下は、「コンストラクタチェーン」の要点を解説します。

  1. 同じクラス内でのコンストラクタ呼び出し: コンストラクタチェーンでは、同じクラス内で定義された異なるコンストラクタがお互いを呼び出します。これにより、コンストラクタの初期化処理が効果的に再利用されます。
  2. thisキーワードの利用: コンストラクタチェーンを実現するためには、this キーワードを使用して同じクラス内の別のコンストラクタを呼び出します。this キーワードを使って別のコンストラクタを呼び出すことで、コンストラクタチェーンが形成されます。
  3. オーバーロードされたコンストラクタ: コンストラクタチェーンを構築するには、同じクラス内でオーバーロードされた複数のコンストラクタが必要です。これらのコンストラクタは異なる引数リストを持つことができます。

以下は、Person クラスの例を通じてコンストラクタチェーンを示すコードです。

public class Person {
    private String name;
    private int age;

    // デフォルトコンストラクタ
    public Person() {
        this("Unknown", 18); // 別のコンストラクタを呼び出す
    }

    // 引数を受け取るコンストラクタ1
    public Person(String name) {
        this(name, 18); // 別のコンストラクタを呼び出す
    }

    // 引数を受け取るコンストラクタ2
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // ゲッターメソッド(省略)
}

この例では、デフォルトコンストラクタが引数つきのコンストラクタを呼び出し、引数つきのコンストラクタが別の引数つきのコンストラクタを呼び出しています。これにより、コンストラクタチェーンが形成され、オブジェクト生成時に柔軟な初期化が可能となります。

「011 コンストラクタ」問題集リスト