如何强制派生类在AS3中实现方法?

时间:2013-02-28 01:21:21

标签: actionscript-3 oop

关于OOP(在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();
       // ...
   }
}

实现这样的事情的唯一方法是删除“abstract”关键字,并将somethingize移动到SomethingWrapper(实现抛出“未实现的异常”),还是有更好的方法对其进行建模? / p>

2 个答案:

答案 0 :(得分: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");
    }
}

答案 1 :(得分: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的继承类可以为他们需要做的工作注入正确的ISomething实现,或者可以在其他地方解析依赖。