在构造函数里一般 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"); } }
没有评论:
发表评论