AS3 - 抽象类
Posted
技术标签:
【中文标题】AS3 - 抽象类【英文标题】:AS3 - Abstract Classes 【发布时间】:2010-12-05 00:50:02 【问题描述】:如何在 AS3 中很好地制作抽象类?
我试过了:
public class AnAbstractClass
public function toBeImplemented():void
throw new NotImplementedError(); // I've created this error
public class AnConcreteClass extends AnAbstractClass
override public function toBeImplemented():void
// implementation...
但是..我不喜欢这种方式。并且没有编译时错误。
【问题讨论】:
【参考方案1】:package
import flash.errors.IllegalOperationError;
import flash.utils.getDefinitionByName;
import flash.utils.getQualifiedClassName;
import flash.utils.getQualifiedSuperclassName;
public class AbstractClass
public function AbstractClass()
inspectAbstract();
private function inspectAbstract():void
var className : String = getQualifiedClassName(this);
if (getDefinitionByName(className) == AbstractClass )
throw new ArgumentError(
getQualifiedClassName(this) + "Class can not be instantiated.");
public function foo():void
throw new IllegalOperationError("Must override Concreate Class");
package
public class ConcreteClass extends AbstractClass
public function ConcreteClass()
super();
override public function foo() : void
trace("Implemented");
【讨论】:
【参考方案2】:在 AS3 中将只使用接口来确保所有功能都在编译时实现。 我知道它有所不同,但是对于上面的示例,它可以解决问题。
【讨论】:
【参考方案3】:只要它们不允许在 actionscript 中使用非公共构造函数,您就必须依赖抽象类和单例的运行时错误。
【讨论】:
【参考方案4】:actionscript 3 不支持抽象类。请参阅http://joshblog.net/2007/08/19/enforcing-abstract-classes-at-runtime-in-actionscript-3/
上述参考资料还提供了一种在 as3 中创建抽象类的骇人听闻的解决方法。
编辑 另见http://www.kirupa.com/forum/showpost.php?s=a765fcf791afe46c5cf4c26509925cf7&p=1892533&postcount=70
编辑 2(回应评论)
很遗憾,您遇到了运行时错误。另一种选择将是拥有一个受保护的构造函数....除了 as3 也不允许这样做。请参阅 http://www.berniecode.com/blog/2007/11/28/proper-private-constructors-for-actionscript-30/ 和 http://gorillajawn.com/wordpress/2007/05/21/actionscript-3-%E2%80%93-no-private-constructor/。
您可能还会发现这些有用:http://www.as3dp.com/category/abstract-classes/,尤其是http://www.as3dp.com/2009/04/07/design-pattern-principles-for-actionscript-30-the-dependency-inversion-principle/
【讨论】:
这很有帮助,但它只有运行时错误。有没有办法在编译时进行检查?以上是关于AS3 - 抽象类的主要内容,如果未能解决你的问题,请参考以下文章