Я полагаю, что у вас возникли проблемы с дизайном, и вы, вероятно, сможете избежать необходимости или необходимости делать это с некоторой реструктуризацией кода.возможно, вы могли бы объединить 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;
}