前のプログラムと違う点は、各敵のクラスにdrawが書かれていることです。このように、親クラスにすでに出てきているメソッドをもう一度子クラスで宣言してやることを、関数のオーバーライドと言います。同じ名前の関数が親と子のどちらにもある場合、子クラスのものが優先して使われます。enemy[i].draw();の部分で、enemy[i]の中身がEnemyAなのかEnemyBなのかEnemyCなのかによって、どのdrawが呼ばれるかが変わってくるということになります。ちなみに前についている@Overrideはアノテーションと呼ばれるもので、ぶっちゃけ意味ないです。コメントだと思ってください。書いて来ましたが、まとめるとこういうことです。{...}で、Aを継承したBというクラスができる。・親クラスのメソッドと同名のメソッドを子クラスで定義してやると、子クラス側のメソッドが優先して呼び出される(オーバーライド)。・継承のメリットは2つ。1いろいろなクラスで共通するメンバをひとまとめにできる2親クラス型の変数で複数の種類のクラスを管理できるので、処理が楽に書ける抽象クラスさて上の例ですが、まずEnemyクラスでdrawを定義し、EnemyA,B,Cでそれをオーバーライドする...という形になっています。なると、「あれ?Enemyのdrawってどうせオーバーライドされたら消えちゃうんだし要らなくね?」ってなります。先ほども書いたように、Enemyでdrawを書いてからオーバーライドする、という形にしているのはEnemyA,B,CをすべてEnemy型の変数で扱うためでした。drawがEnemyに書いていないと、Enemy型の変数にEnemyA,B,Cを入れてもdrawを呼び出せなくなってしまうのでした。ここで必要なのは「drawという名前の関数がEnemyにある」という事実だけなのです。中身はどうでもいいのです。中身は書かないことにしましょう。draw();}関数の頭にabstractとつけると、関数の中身を書かなくてもよくなります。「Enemyはdrawという関数を持ってはいますが、中身をどうするかは子クラスに任せます」という意味になります。このように、中身のない関数のことを抽象関数といいます。抽象関数を持ったクラスは抽象クラスと呼ばれ、頭にabstractをつけなければなりません。抽象クラスはnewできません。//NGそりゃそうです。Enemyはdrawの中身がないのですから、未完成なクラスなわけです。したがって、抽象クラスはそれを継承した子クラスがいて初めてまともに動きます。//OKまとめると、こういうことです。クラス名で抽象クラスを定義できる。関数宣言;で抽象関数を宣言できる。抽象関数には中身は書けず、オーバーライドされたときに中身が決定する。・抽象関数を1つでも持っているクラスは抽象クラスにしなければならない。・抽象クラスはnewできない。インターフェース抽象クラスに似たものとしてインターフェースというものがあります。クラス名で始まっていたのに対し。インターフェース名と書きます。関数宣言;と書いていましたが、インターフェースでは関数宣言;といったようにabstractが要りません。不自然に思うかもしれませんが、これには理由があります。実は、インターフェースに書いた関数は何も書かなくてもすべて抽象関数と解釈されてしまいます。逆に言えば、インターフェースには中身のある関数が書けません。ここがインターフェースと抽象クラスの最大の違いです。インターフェースには変数が書けません。したがって、インターフェース内には基本的に抽象関数しかありません。まとめると、こういうことです。インターフェース名でインターフェースを定義できる。インターフェース名でインターフェースを継承できる。・インターフェース内には基本的に抽象関数しかない。・インターフェース内で抽象関数を定義するときにはabstractを書かなくてもよい。{//キーが一定時間内に押して離された時の処理}}といった具合に書きます。keyTypedをオーバーライドしています。そのようにして定義されたKeyReceiverクラスをJFrameのaddKeyListener関数に渡しています。することで、キーボードに関する何らかの動作が起きた時にそれぞれの状況に応じた関数が自動で呼ばれるようになります。このように、インターフェースや抽象クラスを継承することで「ある出来事が起きた際にするべき動作」を記述しておき、それをどこかの関数に渡して登録を行う...という形式でのプログラムをイベント駆動型のプログラムと言います。その際に「ある出来事が起きた時に呼ばれる関数」のことをコールバック関数と言います。実際のライブラリを使うときにはこのようなコールバック関数をひたすら定義しまくって登録しまくることで楽にプログラムを完成させることができるというわけです。多重スリーブの世界と,各種進捗報告。