コンストラクタ
インスタンスフィールドが増えるとコードが冗長になります。
クラスには、コンストラクタというものがあり、newを使ってインスタンスを生成した後に自動で呼び出される特別なメソッドを使います。
コンストラクタは特別なメソッドのため、定義方法が決まっています。
①コンストラクタ名はクラス名と同じにする
②戻り値を書いてはいけない(voidも書かない)
【例】今回は人(Person)にします
Person.java
class クラス名 {
クラス名() { //コンストラクタ〜
//インスタンス生成時に行いたい処理を記述
} //〜コンストラクタ
}
【例】
Main.java
class Main {
public static void main(String[] args) {
Person person1 = new Person();
Person person2 = new Person();
}
}
Person.java
class Person {
Person() {
System.out.println("おはよう");
}
}
次は、インスタンスを生成する際に、インスタンスフィールドにセットしたい値を引数に渡し、コンストラクタでセットします。
thisを用いてインスタンスを利用することができます。
【例】
MAin.java
class Main {
public static void main(String[] args) {
Person person1 = new Person("佐藤");
person1.hello();
Person person2 = new Person("鈴木");
person2.hello();
}
}
Person.java
class Person {
public String name;
Person(String name) { //コンストラクタがString型の引数を受け取るようにしています
System.out.println("おはよう");
this.name = name; //インスタンスフィールドnameに値をセットしています
}
public void hello() {
System.out.println("私は" + this.name + "です");
}
}
上記だと「new Person("佐藤");」の佐藤の部分がPerson.javaの「Person(String name)」のnameが佐藤(鈴木)になり、さらに「this.name = name;」の右側のnameからthis.nameに佐藤(鈴木)が入る感じです。
コンストラクタの中身の重複
コンストラクタの中身が重複している場合「this()」とすると、コンストラクタから他のコンストラクタを呼び出せます。
this()はコンストラクタを呼び出すための特別なメソッドで、()に引数を渡すこともできます。
thisはコンストラクタの先頭でしか呼び出せません。