2

Flash Builder で新しい actionscript クラスを開始するたびに、コンストラクターが次の行で開始されます。

super()

これは今まで見たことがなく、目的がないようです。削除すると、まったく同じムービーになります。

なぜ新しいクラスに挿入され、何をするのですか?

4

2 に答える 2

5

super()継承 (拡張) するクラスからコンストラクターを呼び出します。

継承された (基本) クラスのコンストラクターに必要なパラメーターがない場合は、それらをすべて一緒に省略でき、フラッシュはコンストラクター コードの前に自動的にそれを呼び出します。

super キーワードを使用して、基本クラスから他の関数​​ (パブリックまたはプロテクト) を呼び出すことができます。

super.myBaseClassMethod(); //would call the method 'myBaseClassMethod' from your base class even if you had an overriden method with in this class

例:

package {
    public class BaseClass {
        public function BaseClass(){
            trace("Base Class Constructed");
        }

        public function someBaseMethod():void {
            trace("some method called from base");
        }
    }

}

package {
    public class MyClass extends BaseClass {  //this class is extending the class above
        public function MyClass():void {
            trace("My Class constructed");

            super();
            someBaseMethod();
            super.someBaseMethod();
        }

        override public function someBaseMethod():void {
            trace("Override");
        }
    }
}

したがって、これを行う場合:

var tmp:MyClass = new MyClass();

あなたは得るでしょう:

"My Class constructed"
"Base Class Constructed"

"override"
"some method called from base"

super() を省略すると、次のようになります。

"Base Class Constructed"
"My Class constructed"

"override"
"some method called from base"
于 2013-05-17T18:50:49.577 に答える
2

継承の一部として、superはメソッドまたはコンストラクターのスーパークラスまたは親バージョンを呼び出します。

メソッドまたはコンストラクターのスーパークラスまたは親バージョンを呼び出します。クラス コンストラクターの本体内で使用すると、super() ステートメントはコンストラクターのスーパークラス バージョンを呼び出します。スーパークラス コンストラクターの呼び出しには、正しい数の引数が必要です。スーパークラス コンストラクターは、明示的に呼び出すかどうかにかかわらず、常に呼び出されることに注意してください。明示的に呼び出さない場合、サブクラス コンストラクター本体の最初のステートメントの前に、引数のない呼び出しが自動的に挿入されます。つまり、サブクラスでコンストラクター関数を定義し、スーパークラス コンストラクターが 1 つ以上の引数を取る場合、正しい数の引数でスーパークラス コンストラクターを明示的に呼び出す必要があります。そうしないと、エラーが発生します。ただし、スーパークラス コンストラクターの呼び出しは、

インスタンス メソッドの本体で使用する場合、super をドット (.) 演算子と共に使用してメソッドのスーパークラス バージョンを呼び出し、オプションで引数 (arg1 ... argN) をスーパークラス メソッドに渡すことができます。これは、スーパークラス メソッドに追加の動作を追加するだけでなく、スーパークラス メソッドを呼び出して元の動作を実行するサブクラス メソッドを作成する場合に役立ちます。

静的メソッドで super ステートメントを使用することはできません。

ActionScript では、クラスは としてマークされていない他の基本クラスを拡張できますfinal

たとえば、MovieClip継承は次のようになります。

スプライト > DisplayObjectContainer > InteractiveObject > DisplayObject > EventDispatcher > オブジェクト

を呼び出すことによりsuper()、親コンストラクターがいつ呼び出されるかを制御します。

package
{
    import flash.display.MovieClip;

    public class ExampleMovieClip extends MovieClip
    {
        public function ExampleMovieClip()
        {
            super(); // MovieClip's constructor is called
        }
    }
}
于 2013-05-17T18:49:38.760 に答える