オブジェクト作成時に呼び出される、コンストラクタ(構築子)を紹介します。
Javaのクラスには、オブジェクト作成時に呼び出される「コンストラクタ」という特殊なメソッドを作成できます。
コンストラクタはクラスと同じ名前です。コンストラクタは、オブジェクトが作成される際に呼び出されます。プログラマーは、このメソッド内で、オブジェクトの初期化処理を行います。
コンストラクタは戻り値として、必ずオブジェクトを戻します。そのためメソッドに戻り値の型を書きません。
package sample;
public class MyClass {
// 公開フィールド(識別用名前)
public String label = "名前";
// コンストラクタ
public MyClass(String newLabel) {
label = newLabel; // ラベルを設定
}
}
コンストラクタはメソッドの1つです。そのため、引数を変えることで、複数のコンストラクタを作り、オーバーロードさせることができます。
コンストラクタのオーバーロードは、引数によって初期化処理の内容を変える目的で使用されます。
package sample;
public class MyClass {
// 公開フィールド(識別用名前)
public String label = "名前";
// コンストラクタ
public MyClass(String newLabel) {
label = newLabel; // ラベルを設定
}
// コンストラクタ その2
public MyClass(int i) {
label = "" + i; // 数値をラベルに
}
}
package sample;
public class Sample {
public static void main(String[] args) {
MyClass mc = new MyClass("遊");
System.out.println(mc.label); // 「遊」と出力
MyClass mc2 = new MyClass(1);
System.out.println(mc2.label); // 「1」と出力
}
}
コンストラクタを特に設定していない時は、引数なしでクラスからオブジェクトを作成できました。これは内部的に、引数なしのコンストラクタが用意されていたからです。
しかし、自分でコンストラクタを設定した場合は、引数なしのコンストラクタは自動では使えなくなります。その際は、自分で引数なしのコンストラクタを追加しなければなりません。
package sample;
public class MyClass {
// 公開フィールド(識別用名前)
public String label = "名前";
// コンストラクタ
public MyClass(String newLabel) {
label = newLabel; // ラベルを設定
}
// コンストラクタ その2
public MyClass(int i) {
label = String.valueOf(i); // 数値をラベルに
}
// コンストラクタ その3
public MyClass() {
}
}
package sample;
public class Sample {
public static void main(String[] args) {
MyClass mc = new MyClass("遊");
System.out.println(mc.label); // 「遊」と出力
MyClass mc2 = new MyClass(1);
System.out.println(mc2.label); // 「1」と出力
MyClass mc3 = new MyClass();
System.out.println(mc3.label); // 「名前」と出力
}
}