2009-10-08 70 views
29

如何在AS3中很好地創建抽象類?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... 
    } 
} 

但是..我不喜歡這種方式。並沒有編譯時錯誤。

回答

22
+0

這是非常有益的,但它只有運行時錯誤..還有就是做這個檢查在編譯時的方法嗎? – 2009-10-08 15:08:01

0

只要他們不允許在ActionScript非公共構造函數,你必須依賴於抽象類運行時錯誤和單身。

6

在AS3中,只是使用接口來確保所有函數都是在編譯時實現的。 我知道它有所不同,但是對於上面那個例子來說就是這樣做的。

12
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"); 
     } 
    } 
}