通过链接分配进行,Actor没有process(WorkerAnt)方法。
相反,这是Processable接口的一部分(因此是Food)。
因此,请确保您Actor是一个Actor实现Processable(例如 a Food)。
理想情况下,您会将processActors(ArrayList<Actor> actors)方法更改为类似processProcessables(ArrayList<Processable> processables).
但是,我在作业中看到你需要实现 aprocessActors(ArrayList<Actor> actors)所以你不能真正做到这一点(尽管我将把它称为糟糕的设计 - 它类似于使用方法divide(object, object)而不是divide(double, double))。
为了看看为什么它是糟糕的设计,作业说
processActors:actors中的每个actor都需要调用它的process方法。
除了Actors 没有process方法 - Processables 有,而Actors 没有Processable。
在任何情况下,您都必须接受这样一个事实,即您期望 some Actors 是Processables 并执行以下操作:
for(Actor nextActor : actors)
{
if (nextActor instanceof Processable)
((Processable)nextActor).process(this);
}
但是,您应该从作业中意识到这一点:
Actor 可以是 QueenAnt、Cake、Cookie 或 WorkerAnt。如果没有 Processable 接口,processActors 将需要确定 actor 的类型,然后在调用 process 之前向下转换 actor 引用。但是,由于这些类中的每一个都实现了 Processable,因此 processActors 只需要在调用之前将 actor 转换为 Processable。这种多态处理是允许的,因为 Processable 包含进程抽象方法。Java 运行时环境 (JRE) 在运行时确定对象的实际类型并调用适当的处理方法。