关于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>
答案 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实现,或者可以在其他地方解析依赖。