0

我有一个类 Spaceship,它具有以下签名的功能: public function CheckMissileHit(enemies:Vector.<Spaceship>):void

我继承了SpaceshipEnemySpaceship。现在,我的旧代码使用上面的函数如下: mPlayer.CheckMissileHit(mEnemySpaceships)

最初mEnemySpaceshipsVector.<Spaceship>,但现在我想利用一些 OOP 概念并创建名为EnemySpaceship.

但不幸的是,如果我传递Vector.<EnemySpaceship>给需要 的函数,Vector.<Spaceship>我就完蛋了。OOP 的基本原则之一是多态性,那么如何在 AS3 中生成它呢?谢谢。

4

2 回答 2

1

在 Actionscript 中使用不同类型参数化的向量之间没有关系。不幸的是,您对此无能为力。没有类似 Java 的List<? extends Spaceship>.

为什么不直接使用Vector.<Spaceship>并用 EnemySpaceships 填充它?

于 2013-09-09T08:03:17.287 回答
1

只需更改函数的定义。IE:

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

应该

public function CheckMissileHit(enemies:*):void

此更改将使您的代码通过编译。我不确定,但如果 EnemySpaceship 继承 Spaceship 应该可以通过 Vector.<EnemySpaceship> 没有问题。

于 2013-09-09T08:03:39.353 回答