質問: new Thread(this); } ``` Threadに関してはthisがあってもなくてもエラーになりませんでした。 これもなぜか教えていただきたいです。 よろしくお願いします。
回答: その引数を受け取れるコンストラクタが存在するか否かです。 HandlerはActivityやその親クラスの型を引数に取るコンストラクタがないため、引数にthis(=このActivityのインスタンス)を渡すとエラーになります。 逆にFrameLayoutは引数なしのコンストラクタがないため、引数のthisを取り除くとエラーになります。 Threadは引数なしのコンストラクタがあるのでthisはなくてもいいのですが、逆にthisがあってエラーにならないというのは妙ですね。本来のコードはこのような宣言になっていませんか? ``` public class MainActivity extends Activity implements Runnable { ``` これなら、thisはRunnableとして扱えるので、Runnableを引数に取るコンストラクタが起動します。 コンストラクタやメソッドで、同名で引数の数や種類を変えることで起動するコンストラクタやメソッドを使い分けることができるこのような仕組みを**オーバーロード**と言います。