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

public class Main {
    public static void main(String[] args) {
        // デフォルトコンストラクタが呼び出される
        Rectangle rectangle1 = new Rectangle();
        System.out.println("Rectangle1: Length = " + rectangle1.getLength() + ", Width = " + rectangle1.getWidth());

        // 引数を受け取るコンストラクタが呼び出される
        Rectangle rectangle2 = new Rectangle(5.0, 10.0);
        System.out.println("Rectangle2: Length = " + rectangle2.getLength() + ", Width = " + rectangle2.getWidth());
    }
}

class Rectangle {
    private double length;
    private double width;

    // デフォルトコンストラクタ
    public Rectangle() {
        this.length = 1.0;
        this.width = 1.0;
    }

    // 引数を受け取るコンストラクタ
    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    // ゲッターメソッド
    public double getLength() {
        return length;
    }

    public double getWidth() {
        return width;
    }
}

この例では、Rectangle クラスのデフォルトコンストラクタと引数を受け取るコンストラクタが異なるオブジェクト生成時に呼び出されています。それぞれのオブジェクトの状態を出力して、どのコンストラクタが呼び出されているか確認できます。デフォルトコンストラクタでは長さと幅がデフォルト値で初期化され、引数を受け取るコンストラクタでは指定した値で初期化されていることが確認できます。

複数のコンストラクタの利用

「複数のコンストラクタの利用」は、同じクラス内で異なる引数リストを持つ複数のコンストラクタを定義し、それぞれのコンストラクタが異なる初期化処理を提供することを指します。これにより、オブジェクトを生成する際に異なる情報を指定して柔軟に初期化できます。

以下に、「複数のコンストラクタの利用」の要点を解説します。

1.構文:
複数のコンストラクタを定義するには、同じクラス内でコンストラクタをオーバーロードします。オーバーロードされたコンストラクタは、引数の型や数が異なるものです。

public class MyClass {
    // コンストラクタ1
    public MyClass(Type1 arg1) {
        // 初期化処理
    }

    // コンストラクタ2
    public MyClass(Type2 arg1, Type3 arg2) {
        // 初期化処理
    }

    // 他のメソッドやコードは省略
}

2.引数の型や数の異なり:
複数のコンストラクタを区別するためには、引数の型や数が異なる必要があります。引数の型や数が同じ場合、コンパイラがどのコンストラクタを呼び出すべきか判断できなくなります。

3.オーバーロードの利用:
コンストラクタのオーバーロードは、異なる初期化の要件に対応する柔軟性を提供します。例えば、オブジェクトの生成に必要な情報が異なる場合に備えて、複数のコンストラクタを用意できます。

public class Person {
    // フィールド: 名前と年齢
    private String name;
    private int age;

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

    // 引数を受け取るコンストラクタ2 (年齢を指定せずに名前だけを受け取る)
    public Person(String name) {
        this.name = name;
        this.age = 0; // デフォルトで0歳とする
    }
}

この例では、Person クラスには2つの異なる引数の組み合わせに対応するコンストラクタが定義されています。これにより、オブジェクトを生成する際に必要な情報を指定して柔軟に初期化できます。

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