У меня есть класс Goo, как это:ActionScript вопрос 3 подкласса метод наследования
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
.
Кто-нибудь знает, как сделать то, что я пытаюсь сделать (разрешить обновление дочернего класса вместо одного из родительского класса)? Благодарю.
Я просто поставил код, который вы разместили здесь почти дословно, и я не получаю тех же результатов, что и вы. Меня переопределил метод, поэтому я думаю, что у вас есть что-то еще. –
Занятия отлично подходят для меня. Flash Player 11.0.1.152, скомпилированный в FlashBuilder с SDK Flex 4.1. Результат, который я получаю, это «обновление GooX». Если я подключу его в цикл ENTER_FRAME, я получаю довольно ровное разброс между GooX и GooY. – meddlingwithfire
Это странно, я запускаю его с помощью Flash Builder 4.6 с помощью Flex SDK 4.1 и Flash Player 11. Это не работает. – jglievano