Prokumaの雑記

限りなく日記帳に近いブログ

講義「オブジェクト指向プログラミング」特集/3. コンストラクタ

九州工業大学飯塚キャンパスの講義「オブジェクト指向プログラミング」特集三番目の記事です。今回の記事で説明するのはコンストラクタというものです。実は前回の記事でもコンストラクタは登場しておりますが、ざっくりとした説明しかしてないので今回は詳しい説明をしてみようと思います。

1. コンストラクタとは

簡単にいうと、インスタンスを生成するとき呼び出されるものです。コンストラクタはnew クラス名(引数);で呼び出します。コンストラクタが呼び出されると左の変数に新しく生成されたインスタンスが格納されます。

1.1 実はコンストラクタを定義しなくてもいい場合がある

実はコンストラクタは必ずしもクラス内で定義する必要があるものではありません。コンストラクタを作成しなくてもインスタンスの生成自体は問題ありません。前回の記事で作成したScoreクラスがその一例です。Scoreクラスはコンストラクタを定義しなかったのにもかかわらず、new Score()インスタンスの生成ができました。これは、基本的にインスタンス生成時に渡す引数がない、かつ生成時にする動作が特に存在しない場合、基本的に何もせずインスタンスを生成するだけのコンストラクタがあるとみなされ、定義しなくても動くわけです。

1.2 コンストラクタの定義の仕方

コンストラクタは次のように定義します。

class Name {
    Name(Type p1, Type p2,...) {
        // 何らかの生成時の動作
    }
}

コンストラクタの名前は、クラスの名前と同じ名前を使う必要があります。引数は必須ではありません。

1.3 コンストラクタの重複定義

実はコンストラクタは引数の種類が異なれば重複して定義できます。

class Name{
    Name() {
        //
    }

   // Stringは文字列の格納ができる型です
    Name(String a, String b) {
        //
    }
}

また、当然な話ですが、それぞれ違う動作を定義するのも可能です。重複定義したコンストラクタは、引数の種類と個数によって区別されます。例えば、new Name();の場合はName()コンストラクタが呼び出されます。new Name("名前", "あだ名");の場合、Name(String a, String b);コンストラクタが呼び出されます。

1.3.1 実はメソッドも重複定義は可能

実はコンストラクタだけではなく、メソッドでも同様のことができます。コンストラクタと同様、引数の種類と個数によって区別されます。

public class Add {
    public int add(int a, int b){
        return a + b;
    }
    public double add(double a, double b){
        return a + b;
    }
}

このように、同じaddという名前でint型の変数同士の足し算とdouble型の変数同士の足し算を行うメソッドを定義することができます。同様の処理を行いたいが入力、つまり受け取るメッセージが違う場合、このような機能を使います。

次回は、継承について紹介したいと思います。今回はここまでです。お疲れ様でした。