2013-02-28 81 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的他们需要做的工作,或者说相关性可能在其他地方解决。

相关问题