在构造函数里一般 super()
必须执行。如果不写,在编译时会在构造函数的最上面添加 super()
。但有时又需要不执行。比如以下代码:
class AbstractClass {
public function AbstractClass() {
throw new Error("Abstract class");
}
}
class SubClass extends AbstractClass {
public function SubClass() {
trace("sub class");
}
}
SubClass
对象会因为超类弹出错误而创建失败。但如果让 super()
不执行就可以了。
class SubClass extends AbstractClass {
public function SubClass() {
if(0) { //这里必须为返回 false 的表达式。但不能为 "false"(false 会被编译器忽视)。
super();
}
trace("sub class");
}
}
测试代码:
package {
import flash.display.*;
public class Test extends Sprite {
public function Test() {
new AbstractClass(); // -> Super CLass
new SubClass1(); // -> Super CLass / Sub CLass1 start / Sub CLass1 end
new SubClass2(); // -> Sub CLass2 start / Sub CLass2 end
}
}
}
class AbstractClass {
public function AbstractClass() {
trace("Super CLass");
}
}
class SubClass1 {
public function AbstractClass() {
trace("Sub CLass1 start");
super();
trace("Sub CLass1 end");
}
}
class SubClass2 {
public function AbstractClass() {
trace("Sub CLass2 start");
if(0) {
super();
}
trace("Sub CLass2 end");
}
}