Compiler errors 如何从arrayList中的不同对象调用方法?

Compiler errors 如何从arrayList中的不同对象调用方法?,compiler-errors,processing,Compiler Errors,Processing,我正在为我的课程创作一个简单的游戏。我有一个数组列表,其中包含我创建的不同职业制造的不同类型的敌人。所有对象都有一个名为paurenemy的方法,该方法将对象绘制到屏幕上(因此每个类中都有函数paurenemy())。我试图在绘制循环中绘制阵列中的所有对象 ArrayList<Object> enemies; enemies.add(new enemy1()) enemies.add(new enemy2()) enemies.add(new enemy3()) void dra

我正在为我的课程创作一个简单的游戏。我有一个数组列表,其中包含我创建的不同职业制造的不同类型的敌人。所有对象都有一个名为
paurenemy
的方法,该方法将对象绘制到屏幕上(因此每个类中都有函数
paurenemy()
)。我试图在绘制循环中绘制阵列中的所有对象

ArrayList<Object> enemies;

enemies.add(new enemy1())
enemies.add(new enemy2())
enemies.add(new enemy3())

void draw(){
    for(Object i : enemies)
      i.drawEnemy();
}
ArrayList敌人;
添加(新的enemy1())
添加(新的enemy2())
添加(新的enemy3())
作废提款(){
用于(对象一:敌人)
i、 付款人();
}

这告诉我函数
drainemy
不存在。

您已经将
定义为
ArrayList
,这意味着迭代它将返回
对象
引用(无论实际运行时类型如何)

如果您想迭代这样的敌人列表,您应该为所有敌人类提取一个公共接口或基类,并将其用于列表类型:

公共接口{
无效付款人();
}
公共类Enemy1实现敌人{
//代码。。。
}
公共类Enemy2实现敌人{
//代码。。。
}
公共类Enemy3实现敌人{
//代码。。。
}
ArrayList敌人;
//然后初始化列表并按原样填充
作废提款(){
for(敌人i:敌人)//注意,i被定义为敌人
i、 付款人();
}

记住,泛型适用于不需要对象的情况。根据定义,一切都是对象的扩展。您需要一个
ArrayList
,然后使用
对(敌人e:enemeies)
进行迭代。现在,您可以调用您在敌方类中定义的任何方法,因为编译程序知道这些方法存在。但是不要给敌人一个方法,只要叫它“画”
:我们已经知道它画了一个敌人,添加一个回音只会添加一个回音。问题是,敌人有不同的对象类型。我使用了不同的类来创建不同类型的敌人,因此enemy1将是一个类,enemy2将是另一个类。@Tahseed arg,在最初的问题中遗漏了这一点,mea culpa。请看我编辑的答案。谢谢你,我一整天都在想这个问题。如果我使用extends而不是implements,这会起作用吗?这两者的区别是什么?