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