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 - 抽象类的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 重写&重载/多态/抽象类/封装/接口/包

10.Dart-抽象类

抽象类

抽象类及抽象类

抽象类与多态

抽象类和抽象方法