AS3の継承

メソッドのオーバーライド

AS3では、サブクラスでスーパークラスのメソッドをオーバーライドする場合、
明示的にoverrideキーワードを使用しなければならなくなった。
サブクラスを見るだけで、このメソッドはサブクラス独自のものか
スーパークラスのメソッドを上書きしたものかがわかるようになったので便利。

AS2の場合

//スーパークラス
class SuperClass
{
    //スーパークラスのメソッド
    private function method1():void
    {
        trace("method1");
    }
}


//サブクラス
class SubClass extends SuperClass
{
    function SubClass()
    {
        method1();
    }
    
    //サブクラスのメソッド
    private function method1():void
    {
        super.method1();
    }
}


//サブクラスの生成
var sc:SubClass = new SubClass();

//output
//method1

AS3の場合

package
{
    //スーパークラス
    public class SuperClass
    {
        /* スーパークラスのメソッド
         * privateだとAS2と違ってサブクラスからアクセスできない。
         * サブクラスからアクセスできるようにするにはprotectedまたはinternalキーワードを使用する。
         */
        protected function method1():void
        {
            trace("method1");
        }
    }
}


package
{
    //サブクラス
    public class SubClass extends SuperClass
    {
        public function SubClass()
        {
            method1();
        }
        /*サブクラスのメソッド
         * 上書きするメソッドにはoverrideキーワードをつける。
         * また、スーパークラスのメソッドのアクセス修飾子と一致させる必要がある。
         * (privateだとコンパイルエラー)
         */
        protected override function method1():void
        {
            super.method1();
        }
    }
}


//サブクラスの生成
var sc:SubClass = new SubClass();

//output
//method1

カテゴリー: AS3fromAS2 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です