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("無職");

}

 

こんなところだろうか

 

目が回る