Thinkers'Studio
JavaとC言語の自習ツール
複数のコンストラクタを定義できることを知っておこう

 コンストラクタは、クラスの新しいインスタンスを作るメソッドで、メンバー変数の初期化などが必要なときに定義します。
 引数の異なる複数のコンストラクタを定義することができ、それを活用すると便利なときがあります。

複数のコンストラクタの定義例

【 例 】 width(幅)と height(高さ)を属性に持つ四角形(Rect)クラス
 Rectクラスのインスタンスを作る際、次のいずれかで初期値を指定したいものとします。
   (1) 幅も高さも指定したい
   (2) 幅は 10.0 固定で、高さだけ指定したい

 下に、(1) と (2) の2つのコンストラクタを作った例を示します。
class Rect {
    double width;       //幅
    double height;      //高さ

    // (1) 幅も高さも引数で指定する
    Rect( double w, double h ) {
        width = w;
        height = h;
    }
    // (2) 高さだけを引数で指定し、幅は10.0固定とする
    Rect( double h ) {
        this( 10.0, h );
    }
    // メンバーの値を返すメソッド
    double getWidth() { return width; }
    double getHeight() { return height; }
}
class UseRect {
    public static void main( String[] args ) {
        Rect r1 = new Rect( 8.0, 4.0 ); // コンストラクタ(1)で作成
        System.out.println( "r1 幅:" + r1.getWidth() );
        System.out.println( "r1 高:" + r1.getHeight() );
        Rect r2 = new Rect( 15.0 );     // コンストラクタ(2)で作成
        System.out.println( "r2 幅:" + r2.getWidth() );
        System.out.println( "r2 高:" + r2.getHeight() );
    }
}

 (2) のコンストラクタでは this( 10.0, h ) により、(1) のコンストラクタを呼び出しています。同じ機能をあちこちに書かず、このように this を使って該当する他のコンストラクタを呼び出して使います。

 複数のコンストラクタを用意する機能は、コンストラクタのオーバーロード(多重定義)と呼ばれます。 上の例のように複数のメンバー変数があるとき、状況によって一部のメンバー変数だけデフォルト値を使用し、あとは指定するようなケースで便利です。 コンストラクタの名前は、すべてクラスと同じ名前にする決まりです。 どのコンストラクタが呼び出されるかは、渡す引数によって決まります。

(今回のクイズです)
 上記のプログラムに、もうひとつ次のようなコンストラクタ(3) を追加定義してください。
   (3) 幅も高さも 10.0 固定で、引数には何も指定しない

 ちなみに呼び出し側は、次のようになります。
        Rect r3 = new Rect(); // コンストラクタ(3)で作成
        System.out.println( "r3 幅:" + r3.getWidth() );
        System.out.println( "r3 高:" + r3.getHeight() );
   (答えは、次回の Java の Tips で ・・・)
前回のクイズの答え: 次の2箇所を修正します。(前回の問題を見る
    //メンバー変数としてfinalのCARRIAGEを定義します
    final static int CARRIAGE = 500;

    //totalPriceメソッドは次のように修正します
    int totalPrice() {
        return price * count + CARRIAGE;
    }