Проблема наследования метода подкласса ActionScript 3 - PullRequest
0 голосов
/ 21 января 2012

У меня есть класс Goo, как это:

public class Goo extends Node
{
    public function Update(dt:Number):void
    {
        // function to be overriden
        trace("updating Goo");
    }
}

и подкласс Goo, называемый GooX:

public class GooX extends Goo
{
    override public function Update(dt:Number):void
    {
        trace("updating GooX");
    }
}

и еще один по имени GooY:

public class GooY extends Goo
{
    override public function Update(dt:Number):void
    {
        trace("updating GooY");
    }
}

, а затем менеджер, который создает объекты Goo и обновляет их следующим образом:

public class Manager
{
    private var gooArray:Vector.<Goo> = new Vector.<Goo>();

    public function Manager():void
    {
        var aGoo:Goo;
        if (Math.random() >= 0.5)
        {
            aGoo = new GooX();
        }
        else
        {
            aGoo = new GooY();
        }
        gooArray.push(aGoo);
    }

    public function Update(dt:Number):void
    {
        for (var i:int = 0; i < gooArray.length; i++)
        {
            gooArray[i].Update(dt);
        }
    }
}

этот код всегда показывает "обновление Goo" в журнале трассировки. Я также попытался определить, какой это тип, выполнив gooArray[i] is GooX или gooArray[i] is GooY, но это всегда false для обоих. Даже если я наложу заклинание с gooArray[i] as GooX, всегда скажет, что объект null.

Кто-нибудь знает способ сделать то, что я пытаюсь сделать (пусть вызывается обновление дочернего класса вместо класса родительского)? Спасибо.

1 Ответ

2 голосов
/ 21 января 2012

Ваш пример логически корректен для Actionscript3, но ваша путаница может быть вызвана конструктором менеджера, поскольку он создает случайный объект любого типа.Чтобы лучше протестировать проблему, замените конструктор менеджера на:

public function Manager():void
{
    gooArray.push(new GooY());
    gooArray.push(new GooX());
}

Эта проблема может быть странной ошибкой в ​​используемом вами компиляторе.Попробуйте выполнить обновление до последней версии SDK, выполните чистый проект и посмотрите, не возникла ли та же проблема.

Наконец, что это за объект "Узел"?Возможно, как невероятная идея, что Node - это некий Object Proxy, который перехватывает вызовы методов.Однако я сомневаюсь, что это относится к вашему проекту.

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