Flash Builder中的super()。为什么?

时间:2013-05-17 18:39:48

标签: actionscript-3 flash flash-builder

每次我在Flash Builder中启动一个新的actionscript类时,都会使用一行

启动构造函数
super()

我以前从未见过这个,似乎没有任何意义。删除它会产生完全相同的电影。

为什么它会插入到我的新课程中,它会做什么?

2 个答案:

答案 0 :(得分:5)

super()从您继承(扩展)的类中调用构造函数。

如果你的继承(基类)在它的构造函数中没有必需的参数,你可以将它们全部省略,flash会在构造函数代码之前自动调用它。

您可以使用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"

答案 1 :(得分:2)

作为inheritance的一部分,super调用方法或构造函数的超类或父版本。

  

调用方法或构造函数的超类或父版本。   在类构造函数的主体内使用时,super()   statement调用构造函数的超类版本。电话   到超类构造函数必须具有正确的数量   参数。请注意,始终调用超类构造函数,   你是否明确地称之为。如果你没有明确打电话   它,在没有参数的调用之前会自动插入   子类构造函数体中的第一个语句。这意味着如果   您在子类和超类中定义构造函数   构造函数接受一个或多个参数,必须显式调用   具有正确数量的参数的超类构造函数或   会发生错误。但是,对超类构造函数的调用,   不需要是子类构造函数中的第一个语句,   正如ActionScript 2.0中所要求的那样。

     

当在实例方法的主体中使用时,super可以与。一起使用   点(。)运算符,用于调用方法的超类版本   可以选择将参数(arg1 ... argN)传递给超类   方法。这对于创建不仅添加的子类方法很有用   超类方法的附加行为,但也调用   超类方法来执行它们的原始行为。

     

您不能在静态方法中使用super语句。

在ActionScript中,类可以扩展未标记为final的其他基类。

例如,MovieClip继承如下:

Sprite> DisplayObjectContainer> InteractiveObject> DisplayObject> EventDispatcher>对象

通过调用super(),可以控制何时调用父构造函数。

package
{
    import flash.display.MovieClip;

    public class ExampleMovieClip extends MovieClip
    {
        public function ExampleMovieClip()
        {
            super(); // MovieClip's constructor is called
        }
    }
}