У меня есть класс 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
.
Кто-нибудь знает способ сделать то, что я пытаюсь сделать (пусть вызывается обновление дочернего класса вместо класса родительского)? Спасибо.