http://qiita.com/koukisayou/items/3ba742548cb0f4c84eaa
こちらのサイトを手本にゲーム作りの基礎みたいなことを学ぼうとした際に、頭に残ったThreadとRunnable。
予想通り、深い関係どころか切っても切れない関係でありんした。
他のサイトなどでTreadをどう使うか、調べてみると、
「Threadクラスを継承したサブクラスを作れ」的な解説に当たります。
で、Threadクラス自体がRunnableインターフェースをimplementsしているので、当然runメソッドを持っていると。
で、このサイトの手本をみると、Threadクラスをextendしてなくて、Runnableをimplementsしており、内部で
Threadクラスのインスタンスを作り、start()メソッドを実行しております。
これは、サブクラスがJPanelをextendsしているので、Javaのお約束、二つのクラスをextends出来ないが故にこういう作りにしたのでしょうね。
で、内部でThreadクラスのインスタンスを作ってstart()メソッドをキックしても、動かすrunメソッドがない。
そんで、Runnableをimplementsしてある、ってことなのでしょう。
おそらく、どっちでもいいのかな、という気がしました。
Threadクラスを継承して、内部でJPanel作っても、いいような気もしなくもない。
paintComponent()を考えてJPanelを継承する方を選んだのですかね。
サブクラスのクラスフィールドとしてJPanel作っておき、
コンストラクタの中でpaintComponentして、runメソッドのループの中でrepaint()する、ということで、同じように動かないですかね。
でもJPanelを継承したこのサブクラスはとても合理的に思えます。
これを手本にして何か作ってみたいです。