質問: new A(100); } } ``` ``` s 7 s 100 ```
回答: 1.についてはHogeAnimalLoverさんが回答されているので・・・ * コンストラクタが複数ある場合this();はどういう基準で別のコンストラクタを呼び出しているのでしょうか? コンストラクターでもメソッドでもオーバーロードしているもののどれが選択されるかの規則は同じです。呼び出しの際の実引数の型と個数によってどれになるかが決まります。型は正確に一致してなくても暗黙変換により「一番適合するもの」が選択されます。このあたりは中途半端に考えてもあまり益はないので教科書か言語仕様書で「完全で正確な定義」を参照することをお勧めします。 * どういう場面でthis();を使おうと考えるのでしょうか? コンストラクターの引数のバリエーションを持たせたい場合に使います。質問者さんのコードでやっていることと同様ですね。バリエーションを持たせたい理由は「一部の引数を省略したい」ことが多いと思います。残念ながらJavaではデフォルト値を与えることで引数を省略するといったテクニックが言語仕様上サポートされてないため、コンストラクターの引数のバリエーションを作りたいと思ったらオーバーロードするしかありません。しかしオーバーロードした各メソッドの実装を同じように書くのはナンセンスですので、あるコンストラクターは「そのコンストラクターより引数の数が多い別のコンストラクター」を呼び出すようにするのが一般的によく使われるケースだと思います。