我有一个Spaceship类,它具有以下签名的功能:
public function CheckMissileHit(enemies:Vector.<Spaceship>):void
我通过Spaceship
继承了EnemySpaceship
课程。现在,我的旧代码使用上面的函数如下:
mPlayer.CheckMissileHit(mEnemySpaceships)
最初,mEnemySpaceships
是Vector.<Spaceship>
,但现在我想利用一些OOP概念并创建一个名为EnemySpaceship
的单独类。
但不幸的是,如果我将Vector.<EnemySpaceship>
传递给需要Vector.<Spaceship>
的函数,我就搞砸了。 OOP的基本原则之一是多态性,那么如何在AS3中生成它?感谢。
答案 0 :(得分:1)
在Actionscript中使用不同类型参数化的向量之间没有关系。不幸的是,你无法真正做到这一点。没有类似Java的List<? extends Spaceship>
。
为什么不使用Vector.<Spaceship>
并将其填入EnemySpaceships?
答案 1 :(得分:1)
只需更改功能的定义即可。即:
public function CheckMissileHit(enemies:Vector.<Spaceship>):void
应该是
public function CheckMissileHit(enemies:*):void
此更改将使您的代码通过编译。我不确定,但如果EnemySpaceship继承了Spaceship,它应该可以通过Vector。&lt; EnemySpaceship&gt;没问题。