1
public class ChildClass extends MovieClip
{
   public function ChildClass()
   {
   }

    public function aChildClassFunction()
     {
     }

}

 public class AnotherChildClass extends MovieClip
{
   public function ChildClass()
   {
   }

    public function aChildClassFunction()
     {
     }

}

childClassを要求するランダム関数(ただし、怠惰なプログラマーはMovieClipクラスを使用するだけです)

    public function setChildClassInstance(var mc:MovieClip) 
    {
// How come "mc" represent and be allowed as parameter ??? It's a super-class.. ie. structurally a sub-set of child-class.

          mc.aChildClassFunction(); //<< Would generate run-time error for 2nd function call. 

    }

上記の関数は、任意のMovieClipインスタンスにも使用できます

 var childClassInstance:ChildClass ;
 var anotherChildClassInstance:AnotherChildClass ; 

 setChildClassInstance( childClassInstance )   // <<<<<VALID,  .... NO COMPILER ERROR 

 setChildClassInstance( anotherChildClassInstance )  
  //<<< VALID, NO COMPILER ERROR ..  BUT WILL CAUSE RUNTIME ERROR !!!! 
//
//
//

どうしてSUPERCLASS(ここではMovieClip)が許可され、子クラス(ここではChildClass、AnotherChildClass)のパラメーターとしてテーマ自体を表すのだろうか。特に、「SUPERCLASSES」は実際にはPARENT-SETの「SUB-SET」であるためです。彼らの子供クラス。

ありがとう

4

1 に答える 1

1

次のクラスでは、Animal が MovieClip のすべてのプロパティを継承していると想定できます。

package  {
    import flash.display.MovieClip;
    public class Animal extends MovieClip{
        public function Animal(){
            // constructor code
        }
        public function growl():void{
            trace('growl')
        }
    }
}

それでは、MovieClip の継承ツリーを見てみましょう。

MovieClip->Sprite->DisplayObjectContainer->InteractiveObject->DisplayObject->EventDispatcher->Object

そして今、私たちは言うことができます

Animal->MovieClip->Sprite->DisplayObjectContainer->InteractiveObject->DisplayObject->EventDispatcher->Object<br>

Animal のインスタンスを Sprite に型キャストします。

var sprite:Sprite = new Animal()

Animal IE:growl で定義されているメソッドが失われます。
これは、継承ツリーの上で定義されたものにアクセスしようとしない限り、問題ありません。
ツリーを上ではなく下にキャストできることを思い出してください。

上記のクラスを使用する

var sprite:Sprite = new Animal()
sprite.growl() // this will error since sprite does not contain

ここで、ルールの例外があります。
MovieClip は動的であるため、MovieClip として型をキャストしても、追加されたメソッド (うなり声) が失われることはありません。

var mc:MovieClip = new Animal()
mc.growl() // traces growl

インターフェイスは動的クラスを実装するクラスへのコントラクトであるため、定義上、動的クラスにインターフェイスを関連付けることはできません。

于 2013-02-01T19:49:45.313 に答える