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

Fan*_*ans 2 flash actionscript-3 flash-builder

每次我在Flash Builder中启动一个新的actionscript类时,都会用一行来启动构造函数

super()
Run Code Online (Sandbox Code Playgroud)

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

为什么它插入到我的新课程中,它有什么作用?

Bad*_*his 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
Run Code Online (Sandbox Code Playgroud)

例:

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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,如果你这样做:

var tmp:MyClass = new MyClass();
Run Code Online (Sandbox Code Playgroud)

你会得到:

"My Class constructed"
"Base Class Constructed"

"override"
"some method called from base"
Run Code Online (Sandbox Code Playgroud)

如果省略super(),它将是:

"Base Class Constructed"
"My Class constructed"

"override"
"some method called from base"
Run Code Online (Sandbox Code Playgroud)