コンストラクの定義方法
①メソッド名がクラス名と完全に等しい
②メソッド宣言に戻り値が記述されていない(voidもダメ)
生まれた直後の動作を定義したHeroクラス
public class Hero {
String name;
int hp;
public Hero() { //コントラストの定義
this.hp = 100; // hpフィールドを100で初期化
}
}
newされた直後に自動的に実行される処理を書いたメソッド
コストラクタが定義されたHeroを生み出す
public class Main {
public static void main(String[] args) {
Hero h = new Hero(); //インスタン生成と同時にHPに100が代入されている
h.hp = 100; //いらない
System.out.println(h.hp); //100と表示される
}
}
コンストラクタで引数を追加情報として受け取る
public class Hero {
String name;
int hp;
public Hero(String name) { //引数として文字列を1つ受け取る
this.hp = 100; // hpフィールドを100で初期化
this.name = name; //引数の値でnameフィールドを初期化
}
}
newで引数を渡す
public class Main {
public static void main(String[] args) {
Hero h = new Hero("勇者"); //インスタン生成後、JVMによって自動的にコンストラクタが実行され、引数として"勇者"が利用される
System.out.println(h.hp); //100と表示される
System.out.println(h.name); //勇者と表示される
}
}
コンストラクタのオーバーロード
public class Hero {
String name;
int hp;
public Hero(String name) { //コンストラスタ①
this.name = name;
}
public Hero() { //コンストラクタ②
this.name = "勇者2" //"勇者2"を設定
}
}
コンストラスタをオーバーロードしたクラスの使用
public class Main {
public static void main(String[] args) {
Hero h = new Hero("勇者"); //文字列引数があるのでコンストラスタ①が呼び出される
System.out.println(h.name); //勇者と表示される
Hero h2 = new Hero(); //引数がないのでコンストラクタ②が呼び出される
System.out.println(h2.name); //勇者2と表示される
}
}