我正在使用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的一部分。
答案 0 :(得分:1)
如果您试图阻止更改公共属性public var pistol:Gun;
,那么如果您无法控制已定义它的类,则不能。这是一个糟糕的设计,它应该是getter / setter。然后,您将能够获得并测试用户传递的内容等。
最好的问候