Я бы сделал интерфейс, чтобы иметь возможность делать то, что вы просите.Это вам не нужно приводить переменную, и это даст вам доступ к вашей функции doSomething.Вот небольшой пример использования вашей структуры: Обратите внимание, что все классы находятся в одном корневом пакете, следовательно, нет операторов импорта.
MainApp.as (это приложение по умолчанию)
package
{
import flash.display.Sprite;
public class MainApp extends Sprite
{
private var parentClass : IParent;
private var doA : Boolean = false;
public function MainApp()
{
if (doA)
parentClass = new DerivedClassA();
else
parentClass = new DerivedClassB();
parentClass.doSomething();
}
}
}
Parent.as
package
{
import flash.display.Sprite;
public class Parent extends Sprite
{
public function Parent()
{
}
}
}
DerivedClassA.as
package
{
public class DerivedClassA extends Parent implements IParent
{
public function DerivedClassA()
{
super();
}
public function doSomething() : void
{
trace (this + " done something");
}
}
}
DerivedClassB.as
package
{
public class DerivedClassB extends Parent implements IParent
{
public function DerivedClassB()
{
super();
}
public function doSomething() : void
{
trace (this + " done something");
}
}
}
IParent.as
package
{
public interface IParent
{
function doSomething():void;
}
}
Как видите, используя интерфейс, вы вызываете функцию doSomething без приведения.Нет проблем с приведением переменных, но это может дать вам более структурированный код, и это гарантирует, что у вас есть метод doSomething в классах, которые реализуют интерфейс.Надеюсь, это поможет ... Удачи