Это очень короткий пост о том, как в подклассе переопределить метод надкласса, принимающий неограниченное количество параметров.
Предположим, у нас есть класс Foo, в котором объявлен метод bar, принимающий один фиксированный параметр str, а так же произвольное число дополнительных параметров:
-
package
-
{
-
public class Foo
-
{
-
public function Foo()
-
{
-
-
}
-
-
public function bar(str:String, ...rect):void
-
{
-
trace("STR: " + str);
-
for(var i:int = 0; i <rect.length; i ++)
-
{
-
trace(rect[i]);
-
}
-
}
-
}
-
}
И есть его подкласс SubFoo, в котором мы хотим переопределить метод bar. Это делается следующим образом:
-
package
-
{
-
public class SubFoo extends Foo
-
{
-
public function SubFoo()
-
{
-
-
}
-
-
override public function bar(str:String, ...rect):void
-
{
-
// Подготавливаем массив всех параметров.
-
rect.unshift(str);
-
// Вызываем метод bar суперкласса через apply,
-
// передавая ему массив всех параметров.
-
super.bar.apply(this, rect);
-
-
// Выполняем какие-то дополнительные действия...
-
}
-
}
-
}
Тестируем:
-
package
-
{
-
import flash.display.Sprite;
-
-
public class Main extends Sprite
-
{
-
public function Main():void
-
{
-
var foo:SubFoo = new SubFoo();
-
foo.bar("hello", 10, false);
-
}
-
}
-
}
Если вам известны более элегантные способы решения данной задачи, то не стесняйтесь выкладывать их в комментариях к этой записи. =)
Интересное решение и очень элегантное