2013-02-28 80 views
3

我有一個關於OOP(在AS3)一個相當簡單的理論問題,我不知道怎麼谷歌:如何執行派生類來實現AS3中的方法?

我需要像一個抽象類,這將需要依賴類實現了一些接口,像這樣:

Interface ISomething 
{ 
    public function somethingize(otherThing:type):void; 
} 

abstract public class AbstractSomething implements ISomething 
{ 
    public function AbstractSomething() 
    { 
     // ... 
    } 

    public function doSomething():void 
    { 
     //code here 
     // ... 
     this.somethingize(); 
     // ... 
    } 
} 

是要實現這樣的事情的唯一方法是刪除一個「抽象」的關鍵字,並somethingize移到SomethingWrapper(與拋出「未實現的例外」的實現),或者是有一些更好的方式來模型呢?

+0

我對這個主題的看法一直在搖擺不定,「僅僅使用語言給你的東西」(界面),以及像你/以及下面的答案所建議的那樣。坦率地說,我不喜歡默認情況下拋出異常的方法。最後,我認爲這取決於你。我一直很滿意w /接口。也許無知真的是幸福。 – 2013-02-28 03:21:47

+0

另外,w/MVC框架可以執行依賴注入,您可以將依賴項聲明爲接口並注入實現它的任何東西,這非常方便。對「抽象」類同樣如此?這可能是我喜歡使用接口而不是抽象類的原因。 – 2013-02-28 03:30:48

回答

3

ActionScript不支持抽象類(不幸的是)。

我認爲有一些技巧在那裏,試圖模仿摘要,但我的方式太隨便扔在我的抽象類,以阻止他們的錯誤直接使用,例如:

public class AbstractSomething implements ISomething 
{ 
    public function AbstractSomething() 
    { 
     throw new Error("this is an abstract class. override constructor in subclass"); 
    } 

    public function doSomething():void 
    { 
     throw new Error("this is an abstract class. override doSomething in subclass"); 
    } 
} 
0

沒有更多的信息關於具體實現,我寧願組成超過繼承在這種情況下,具體是依賴注入。

public interface ISomething { 
    function somethingize(thing:*):void; 
} 

public class SomeWorker { 

    private var _something:ISomething; 

    public function SomeWorker(something:ISomething) { 
     this._something = something; 
    } 

    public function doSomething():void { 

     // work 
     this._something.somethingize(obj); 
     // more work 

    } 
} 

SomeWorker的Inherrited類可以注入的正確實施ISomething的他們需要做的工作,或者說相關性可能在其他地方解決。

相關問題