0

我正在使用 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 的一部分。

4

1 回答 1

1

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

此致

于 2012-09-27T11:28:05.747 回答