いうコードがあったとしましょう。50;敵を表すクラスとプレイヤーを表すクラスがあります。見てみると、これら2つには共通する事項が多くみられます。EnemyZまで作るとしたらどうでしょう。同じことを何度も書くなんて意味がないですよね。そこで、クラスの継承という機能を使って意味が同じになるように書いてみます。{//道具を使う}}どうでしょうか。クラスの数は増えましたが、共通する事項はすべてCharacterクラスに入ってしまっていて、EnemyやPlayerクラスではそこに含まれない部分のみを記述しています。{...}が書かれているかのように使うことができます。共通する部分を一回書くだけで何度もそこを使いまわせるというわけです。このように、あるクラスのメンバ(変数や関数)を別のクラスに持ってくることを継承といいます。{...}という風に記述していきます。継承されるクラスを親クラスと呼び、継承するクラスを子クラスと呼びます。継承には特殊な作用があります。Player();といった書き方をします。先ほどの例のようにEnemy,PlayerクラスがCharacterクラスを継承している場合には、**Character型の変数でEnemyやPlayerを扱うことができます。Player();といったことができます。一般に、変数の型を親クラスの型にしておくと、中身に子クラスを入れることができます。このときにenemyやplayerといった変数を用いて使えるメンバーはx,y,hp,attack()などのCharacterに書き込まれている(共通部分)だけで、その他のuseItem()やuseMagic()といったものは使えません。//NGコンパイラはその変数に何が入っているかまでは確かめられません。その変数の中身が何かを推定する情報はその変数の型のみなので、Character型の変数から呼び出せるメンバもCharacterの範疇にとどまるというわけです。変数の型と中身の型が一致しなくてもよいという一見奇妙な機能は、実はとても有用なものです。あなたがシューティングゲームを作っていたとしましょう。ゲームには様々な敵キャラ、弾、アイテムが出現します。enemyCList[i].draw();...といった具合のコードを書くことになります。これは敵の種類が増えれば増えるほど変数の種類も増え、for文の個数も増えていきます。{}と書いていたらどうでしょう?先ほど書いた通り、変数の型が親クラスのものであれば、中身には子クラスを入れることができます。enemy[i].draw();で十分ということになります。敵の種類がいくつ増えようとも、それぞれの敵のクラスがEnemyクラスを継承している限りは上の2行ですべてを賄いきれるというわけです。・・・ってあれ?何かおかしくないですか?先ほどの説明によると、継承とは親クラスのメンバ、つまり変数や関数を子クラス側にコピーするというものでした。いうことはEnemyA,B,CのdrawメソッドはEnemyのdrawメソッドとそっくりそのまま同じ動作をするはずです。いうことは敵クラスの種類をいくら増やしてもその描画のされ方は同じということですから、見た目は全部同じ・・・ってことですよね?そんな横暴は許されるはずがありません。そもそも私たちが共通部分として利用したいのは、「drawという関数全部」ではなく「drawという名前の関数がある」というところなのですから。EnemyA,B,C,...はdrawという関数は持っている。いう状況にしたいわけです。そこで新たな機能の登場です。