(section08-03 クラス継承の補足)
※複数のクラスを継承する方法について補足します。p.260のextendsの補足説明になります。
複数のクラスを継承する
MovieClipクラスはSpriteクラスやDisplayObjectクラスなどの複数のクラスを継承していますが、このように複数のクラスを継承したい場合はどうすればよいのでしょうか。結論から言えば1つのサブクラスは1つのスーパークラスしか指定できません。たとえば、MyClassAとMyClassBの両方を継承したMyClassCを作りたいとき、次のようにスクリプトを書くことはできません。
間違ったスクリプト1
MyClassAとMyClassBの両方を継承したMyClassCを作りたいならば、まず、MyClassAを継承したMyClassBを作り、次にMyClassBを継承したMyClassCを作るという方法をとります。たとえば、次のMyClassCではスーパークラスであるMyClassBのtestB()だけでなく、そのMyClassBのスーパークラスのMyClassAのtestA()も利用できます。
このように親がさらにその親を継承していくという手法によって結果としてサブクラスが複数のクラスを継承できます。
[:script:]MyClassAクラス
[:script:]MyClassAクラスを継承しているMyClassBクラス
[:script:]MyClassBクラスを継承しているMyClassCクラス
なお、インスタンスが特定のクラスを継承しているかどうかはis演算子を使って判断できます。
[:script:]指定のクラスを継承しているかどうか調べる
※複数のクラスを継承する方法について補足します。p.260のextendsの補足説明になります。
複数のクラスを継承する
MovieClipクラスはSpriteクラスやDisplayObjectクラスなどの複数のクラスを継承していますが、このように複数のクラスを継承したい場合はどうすればよいのでしょうか。結論から言えば1つのサブクラスは1つのスーパークラスしか指定できません。たとえば、MyClassAとMyClassBの両方を継承したMyClassCを作りたいとき、次のようにスクリプトを書くことはできません。
間違ったスクリプト1
class MyClassC extends MyClassA, MyClassB;間違ったスクリプト2
class MyClassC extends MyClassB extends MyClassA;
MyClassAとMyClassBの両方を継承したMyClassCを作りたいならば、まず、MyClassAを継承したMyClassBを作り、次にMyClassBを継承したMyClassCを作るという方法をとります。たとえば、次のMyClassCではスーパークラスであるMyClassBのtestB()だけでなく、そのMyClassBのスーパークラスのMyClassAのtestA()も利用できます。
このように親がさらにその親を継承していくという手法によって結果としてサブクラスが複数のクラスを継承できます。
[:script:]MyClassAクラス
package { public class MyClassA { public function testA() { trace("test A"); } } }
[:script:]MyClassAクラスを継承しているMyClassBクラス
package { public class MyClassB extends MyClassA { public function testB() { trace("test B"); } } }
[:script:]MyClassBクラスを継承しているMyClassCクラス
package { public class MyClassC extends MyClassB { public function testC() { testA();//MyClassAから継承しているメソッド testB();//MyClassBから継承しているメソッド } } }
なお、インスタンスが特定のクラスを継承しているかどうかはis演算子を使って判断できます。
[:script:]指定のクラスを継承しているかどうか調べる
var mc:MovieClip=new MovieClip(); trace(mc is DisplayObject);//出力:true trace(mc is EventDispatcher);//出力:true trace(mc is Number);//出力:false