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); // 「名前」と出力 } }