Как объявить переменную с типом x и интерфейсом y? - PullRequest
1 голос
/ 24 мая 2011

Например, если у меня есть объект, который расширяет Sprite и реализует Mungable я хотел бы сделать что-то вроде: -

var foo:Sprite <mungable>

чтобы я мог сделать что-то вроде:

addChild(foo);
foo.munge();

Возможно ли это в ActionScript 3?

Ответы [ 3 ]

2 голосов
/ 24 мая 2011

Конечно, это так.

В AS3 вы не можете иметь множественное наследование, но интерфейсы довольно распространены.

Для вашего интерфейса создайте файл actioncript с именем IMungable.as

package
{
    public interface IMungable
    {
        function munge():void;
    }
}

Для своего пользовательского спрайта создайте файл действий с именем MyFoo.as

package
{
    import flash.display.Sprite;

    public class MyFoo extends Sprite implements IMungable
    {
        public function MyFoo()
        {
            super();
        }

        public function munge():void{
            trace("munging");
        }
    }
}

Затем в любом другом месте просто создайте новый экземпляр и вызовитеМетод.

            var foo:Sprite = new MyFoo();
            addChild(foo);
            IMungable(foo).munge();

Приветствия

2 голосов
/ 24 мая 2011

Не напрямую.Как предлагали другие, вы можете создать тип, скажем MungableSprite, который расширяет Sprite и реализует Mungable, а затем ссылаться на этот тип.Однако вы сможете использовать это только для объектов, тип которых является подтипом MungableSprite.

Но вы не можете просто передать отношение типа "объект, который является Mungeable and Sprite".*

0 голосов
/ 24 мая 2011

Конечно. Вы можете просто привести свою переменную к интерфейсу.

public class MySprite extends Sprite implements IMungable {
    public function munge() : void {
        // this is the interface function to implement
    }
}

var foo:Sprite = new MySprite() as Sprite;
IMungable(foo).munge();

Вы также можете привести к MySprite для вызова munge().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...