this
コンストラクタを指定出来るクラスの作成において
渡される引数の数に応じて呼ばれるコンストラクタを変える場合
それぞれのコンストラクタを定義しなければならないわけだけども
たとえばオブジェクトのメンバが三つ有って
(名前、誕生日、満腹度)
デフォルトならnew Human();
全て呼び出すときに値を代入したいならnew Human("田中太郎", 19970904, 60);
と書くと思うけど
もし誤って満腹度の入力を忘れたら?
めんどくさくなって名前しか入力しなかったら
誕生日を入力し忘れてnew Human("田中太郎", 60);
だったらどうなるのか
そもそもこれがゲームのキャラクターで
満腹度が0だった場合出現した瞬間に死ぬとして
引数が名前だけ、あるいは名前が無くてもとりあえず満腹度があって
出現してほしかったり
こういった場合を想定してコンストラクタを定義しておく場合に
thisを使って効率よくコンストラクタを定義するのだけれども
Human(String name, int birthday, int manpuku) {
this.name = name;
this.birthday = birthday;
this.manpuku = manpuku;
}
Human(String name,int brthday) {
this(name, birthday, 60);
}
Human(String name) {
this(name, birthday, 0);
}
Human() {
this("不明");
}
となるらしい
一番上のコンストラクタでは名前、誕生日、満腹度が引数として渡されるため
こちらでメンバ変数を定義する必要は無い
しかし一つしたでは、満腹度が定義されていないためこちらで60と代入してやる
何のメンバ変数に代入するか?というのはthisによってHumanには三つの変数があるという定義が呼び出されるので大丈夫
そしてさらに一個下だが次は誕生日が欠けている
これは不明とでもいれたいがint型であるので0とする、nullでもいいのかな
満腹度が無いがthisによって上の60を代入する定義が呼び出される
最後に名前が無い場合は不明と代入して後はthisによって今までどおりとなるのか
これは多少自分でクラスを作ってコンストラクタを定義しないと覚えられないかもしれない
ゲームを作る場合にせよSwingやawtの全体がわからなくとも
パラメーターなんかは自分で作らないといけないわけだから
いまのうちに自分で作っておけるわけだ
Human(String job, int hp, int mp, int attack, int defence) {
this.job = job;
this.hp = hp;
this.mp = mp;
this.attack = attack;
this.defence = defence;
}
Human(String job, int hp, int mp, int attack) {
this(job, hp, mp, attack, 5)
}
Human(String job, int hp, int mp) {
this(job, hp, mp, 5);
}
Human(String job, int hp) {
this(job, hp, 20);
}
Human(String job) {
this(job, 50);
}
Human() {
this("無職");
}
こんなところだろうか
目が回る