2013-09-09 11 views
0

У меня есть класс Spaceship, который имеет функцию со следующей подписью: public function CheckMissileHit(enemies:Vector.<Spaceship>):voidPass дочернего объекта для функции, которая требует родительского объекта

Я унаследованный Spaceship класса по EnemySpaceship. Теперь, мой старый код использует функцию выше, следующим образом: mPlayer.CheckMissileHit(mEnemySpaceships)

Первоначально mEnemySpaceships был Vector.<Spaceship>, но теперь я хочу использовать некоторые концепции объектно-ориентированного программирования и создали отдельный класс под названием EnemySpaceship.

Но, к сожалению, если я передаю Vector.<EnemySpaceship> функции, которая требует Vector.<Spaceship>, я ввернута. Одним из основополагающих принципов ООП является полиморфизм, поэтому как я могу его создать в AS3? Благодарю.

ответ

1

Нет никакой связи между векторами, параметризованными разными типами в ActionScript. К сожалению, вы ничего не можете с этим поделать. Нет такого эквивалента, как Java List<? extends Spaceship>.

Почему бы не просто использовать Vector.<Spaceship> и заполнить его вражескими кораблями?

1

Просто измените определение функции. Т.е .:

public function CheckMissileHit(enemies:Vector.<Spaceship>):void 

Должно быть

public function CheckMissileHit(enemies:*):void 

Это изменение сделает ваш код прохождения компиляции. Я не уверен, но если EnemySpaceship наследует Spaceship, это может быть возможно передать Vector. < EnemySpaceship> без проблем.