コンストラクタとは
インスタンス化の時(new演算子を使う時)に実行されるメソッド。
コンストラクタの定義
- コンストラクタはメソッドの一種なのでメソッドの定義の仕方とあまり変わらない。下記の点がコンストラクタに特有であることに注意する。
- メソッド名は自由につけられない。コンストラクタはクラス名と同じにする。
- 戻り値(返り値)の型は記述しない。
コンストラクタが定義されているクラスの例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public class Person { public String name; // 名前を表すフィールド public int age; // 年齢を表すフィールド /** * 引数なしのコンストラクタ */ public Person() { name = "名無し"; age = 20; } /** * フィールドに値をセットするための引数をもつコンストラクタ */ public Person(String name, int age) { this.name = name; this.age = age; } /** * 自己紹介をするメソッド */ public void printSelfIntroduction() { System.out.println("私の名前は" + name + "で" + age + "歳です。"); } } |
インスタンス化
1 2 3 4 5 6 7 8 9 |
public class Main { public static void main(String[] args) { Person person1 = new Person(); person1.printSelfIntroduction(); // 「私の名前は名無しで20歳です。」と表示される。 Person person2 = new Person("たろう", 22); person2.printSelfIntroduction(); // 「私の名前はたろうで22歳です。」と表示される。 } } |
ポイント
- コンストラクタの名前はクラス名と同じでなければならないため、複数のコンストラクタを定義するには(メソッド名で区別できないので)、引数の形(個数、型の並び順)が違っていなければならない。つまりコンストラクタのオーバーロード。(教科書P.72等)
- コンストラクタを定義しないクラスには、デフォルトコンストラクタが自動的に生成される(定義したことになる)。デフォルトコンストラクタは、引数なしで何の処理もしない。
- ハマりやすいポイント: 引数ありのコンストラクタを定義しただけだと、引数なしでインスタンス化することができない(1つもコンストラクタを定義しない場合にしかデフォルトコンストラクタが生成されないから)。
教科書
- P.74〜77: コンストラクタ
- P.72: オーバーロード