我相信你在這裏遇到了一個設計問題,你可能可以避免想要或者需要做一些重構代碼的工作。也許你可以將skin
和avBody
合併成一個類?你可以決定,現在讓我們假設重新設計不是解決方案。
不幸的是,因爲函數重載是不是在AS3可能的,像下面這樣的解決方案也是不可能的,因爲覆蓋必須具有相同的特徵:
override public function set x(value:Number, caller:*):void
{
if (caller is AvBody)
super.x = value;
}
//Error: Incompatible override.
你可以簡單地覆蓋x
和y
制定者,顯示ArgumentError
如果他們被調用,而是使用x
和y
屬性的自定義內部設置器,即使它有點貧民窟。
override public function set x(value:Number):void
{
throw new ArgumentError("Can not set public 'x' property on Skin class. Set internal 'posX' property instead");
}
override public function set y(value:Number):void
{
throw new ArgumentError("Can not set public 'y' property on Skin class. Set internal 'posY' property instead");
}
internal function set posX(value:Number):void
{
super.x = value;
}
internal function set posY(value:Number):void
{
super.y = value;
}
如果我理解的很好,有一個對象A具有皮膚和身體屬性。但身體是唯一應該修飾皮膚的。我對嗎 ?那麼,爲什麼皮膚是「A」物體的屬性而不是身體的屬性呢? – David 2011-06-16 08:53:46
身體可能代表一個物理身體,而皮膚是視圖/動畫片段。因此,如果皮膚是身體的一種屬性,它會產生高度的耦合。 – Shannon 2011-06-16 15:30:12