在构造函数里一般 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");
}
}
![[Google]](http://www.google.com/logos/Logo_25wht.gif)
![[Synchronous Space]](http://weihe924stephen.googlepages.com/syncspace-banner.jpg)
![[Creative Commons License]](http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png)
![[Add to Google]](http://buttons.googlesyndication.com/fusion/add.gif)
![[Aggregated by MXNA]](http://weblogs.macromedia.com/mxna/images/mxna88x31.gif)
![[Flex.org]](http://www.flex.org/images/flexorg.gif)
![Validate my Atom 1.0 feed [Valid Atom 1.0]](http://validator.w3.org/feed/images/valid-atom.png)
![Validate my RSS feed [Valid RSS]](http://resource.googlecode.com/files/valid-rss.png)
![[I heart FeedBurner]](http://www.feedburner.com/fb/images/pub/i_heart_fb.gif)
没有评论:
发表评论