继承一个使用Has-A关系的类并用子类替换拥有的类?

时间:2012-09-26 23:19:08

标签: actionscript-3 oop inheritance

我正在使用ActionScript3,我正在编写一个扩展Bitmap的类,我希望得到所有Bitmap的行为,我也想要用bitmapData的子类替换它的bitmapData,以提供更大的灵活性。

基本上我所拥有的是(比喻):

Class Gunman
{
    //Has-A
    public var pistol : Gun;
    public function Gunman(gun : Gun)
    {
        this.pistol = gun;
    }
    //methods
    public function shoot():void ..
    {
        pistol.fire();
    }  
}

Class Gun
{
    //constructor omitted cause it is unnecessary for this example
    public function fire():void ..
}

现在我扩展这两个类。

Class Automatic extends Pistol
{
    override public function fire():void
    {
        super.fire(); super.fire(); super.fire();
    }
}

Class NavySeal extends Gunman
{
    public function Enforcer(auto : Automatic)
    {
        super(auto);
    }
}

问题是人们仍然可以轻松地做到这一点:

var eliteSoldier : NaveSeal = new Enforce(new Automatic());
eliteSoldier.pistol = new Gun();

这会很糟糕。我有什么方法可以阻止这种情况吗?

我不能改变'Gunman',因为它是API的一部分。

1 个答案:

答案 0 :(得分:1)

如果您试图阻止更改公共属性public var pistol:Gun;,那么如果您无法控制已定义它的类,则不能。这是一个糟糕的设计,它应该是getter / setter。然后,您将能够获得并测试用户传递的内容等。

最好的问候