■クラスの継承とは
1つのよくできた基本的なクラスAがあるとき、それにもう少しだけ機能を追加した新しいクラスが必要になったとします。このとき、クラスAを改変したクラスA'を作るのではなく、クラスAはそのままいじらずに、クラスAを継承して追加したい機能だけを書き足したクラスBを作ることができます。クラスBはクラスAを継承しているので、クラスAの機能をそのまま受け継ぎ、新しく追加した機能も利用できるクラスになります。このような手法を「継承(Inheritance)」と呼び、クラスを「拡張」して新しいクラスを作るという表現も用いられます。そして、継承される側のクラス(この例ではクラスA)をスーパークラスと呼び、継承する側のクラス(この例ではクラスB)をサブクラスと呼びます。
fig04-02-01 クラスの継承
1つのよくできた基本的なクラスAがあるとき、それにもう少しだけ機能を追加した新しいクラスが必要になったとします。このとき、クラスAを改変したクラスA'を作るのではなく、クラスAはそのままいじらずに、クラスAを継承して追加したい機能だけを書き足したクラスBを作ることができます。クラスBはクラスAを継承しているので、クラスAの機能をそのまま受け継ぎ、新しく追加した機能も利用できるクラスになります。このような手法を「継承(Inheritance)」と呼び、クラスを「拡張」して新しいクラスを作るという表現も用いられます。そして、継承される側のクラス(この例ではクラスA)をスーパークラスと呼び、継承する側のクラス(この例ではクラスB)をサブクラスと呼びます。
fig04-02-01 クラスの継承
ActionScript3.0にはたくさんのクラスがありますが、そのほとんどは継承を使って作られているクラスです。たとえば、MovieClipクラスはSpriteクラスを継承して作られたクラスです。MovieClipクラスは、Spriteクラスの機能を継承し、その上にタイムラインの機能を追加したクラスです。逆に言えばMovieClipクラスそのものにはタイムラインを制御するメソッドやプロパティしかなく、その他の機能はSpriteクラスから受け継いでいます。
具体的にはMovieClipクラスにはgotoAndPlay()、play()、currentFrame、totalFramesといったフレームを移動するメソッドやプロパティはあるものの、ムービークリップインスタンスの表示座標、幅、高さ、透明度などを示すプロパティやドラッグ、ヒットテスト、ディスプレイオブジェクトの追加や削除といったメソッドはありません。
ところで、MovieClipクラスが受け継いでいる機能がすべてSpriteクラスのものかと言えば実はそうではありません。SpriteクラスもまたDisplayObjectContainerクラスというクラスを継承しています。そして、そのDisplayObjectContainerクラスはさらにInteractiveObjectクラスを継承し、そのInteractiveObjectクラスはDisplayObjectクラス、DisplayObjectクラスはEventDispatcherクラス、EventDispatcherクラスはObjectクラスを継承して作られています。結果として、MovieClipクラスは6個のクラスを継承していることになります。次の矢印の向きは、それぞれのクラスのスーパークラスを指しています。
MovieClipクラスが継承しているクラス
MovieClip→Sprite→DisplayObjectContainer→InteractiveObject→DisplayObject→EventDispatcher→Object
[:note:]
スーパークラスは基本クラス、基底クラス、親クラスといった呼び方もされます。出力ウインドウに表示されるエラーメッセージでは基本クラスと呼ばれています。サブクラスは派生クラス、子クラスといった呼び方もされます。
■継承している機能を利用する
クラス継承がどう行われているかはヘルプで確認する必要があります。Flashヘルプでクラスの説明を開くと、一番最初にクラスのパッケージ、継承しているクラス、このクラスのサブクラスが書いてあります。
fig04-02-01 ヘルプでMovieClipクラスを見るとパッケージ、継承しているクラス、サブクラスがわかります。
そして、「継承されるパブリックプロパティの表示」と「継承されるパブリックプロパティの非表示」のようにクリックで継承している機能を表に表示するかどうかを切り替えることができます。機能の左に↑のアイコンが付いているものは継承された機能です。そして「定義」という項目にそのプロパティやメソッドが実際に定義されているクラス名が書いてあります。
fig04-02-02 継承している機能には↑アイコンが付いており、「定義」の項目にその機能が定義してあるクラス名が書いてあります。
具体的にはMovieClipクラスにはgotoAndPlay()、play()、currentFrame、totalFramesといったフレームを移動するメソッドやプロパティはあるものの、ムービークリップインスタンスの表示座標、幅、高さ、透明度などを示すプロパティやドラッグ、ヒットテスト、ディスプレイオブジェクトの追加や削除といったメソッドはありません。
ところで、MovieClipクラスが受け継いでいる機能がすべてSpriteクラスのものかと言えば実はそうではありません。SpriteクラスもまたDisplayObjectContainerクラスというクラスを継承しています。そして、そのDisplayObjectContainerクラスはさらにInteractiveObjectクラスを継承し、そのInteractiveObjectクラスはDisplayObjectクラス、DisplayObjectクラスはEventDispatcherクラス、EventDispatcherクラスはObjectクラスを継承して作られています。結果として、MovieClipクラスは6個のクラスを継承していることになります。次の矢印の向きは、それぞれのクラスのスーパークラスを指しています。
MovieClipクラスが継承しているクラス
MovieClip→Sprite→DisplayObjectContainer→InteractiveObject→DisplayObject→EventDispatcher→Object
[:note:]
スーパークラスは基本クラス、基底クラス、親クラスといった呼び方もされます。出力ウインドウに表示されるエラーメッセージでは基本クラスと呼ばれています。サブクラスは派生クラス、子クラスといった呼び方もされます。
■継承している機能を利用する
クラス継承がどう行われているかはヘルプで確認する必要があります。Flashヘルプでクラスの説明を開くと、一番最初にクラスのパッケージ、継承しているクラス、このクラスのサブクラスが書いてあります。
fig04-02-01 ヘルプでMovieClipクラスを見るとパッケージ、継承しているクラス、サブクラスがわかります。
そして、「継承されるパブリックプロパティの表示」と「継承されるパブリックプロパティの非表示」のようにクリックで継承している機能を表に表示するかどうかを切り替えることができます。機能の左に↑のアイコンが付いているものは継承された機能です。そして「定義」という項目にそのプロパティやメソッドが実際に定義されているクラス名が書いてあります。
fig04-02-02 継承している機能には↑アイコンが付いており、「定義」の項目にその機能が定義してあるクラス名が書いてあります。