当前位置:  开发笔记 > 编程语言 > 正文

AS3 - 抽象类

如何解决《AS3-抽象类》经验,为你挑选了3个好方法。

我怎样才能很好地在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> Jonathan Fin..:

actionscript 3不支持抽象类.请参阅http://joshblog.net/2007/08/19/enforcing-abstract-classes-at-runtime-in-actionscript-3/

上面的引用还提供了一种在as3中创建抽象类的hackish变通方法.

编辑
也见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-换动作-30-的依赖性反转原理/



2> bitmapdata.c..:
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");
        }
   }
}



3> Theo.T..:

在AS3中,只需使用接口来确保所有函数都在编译时实现.我知道它有所不同,但是就像上面的一个例子那样.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有