通过链接分配进行,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方法。
除了Actor
s 没有process
方法 - Processable
s 有,而Actor
s 没有Processable
。
在任何情况下,您都必须接受这样一个事实,即您期望 some Actor
s 是Processable
s 并执行以下操作:
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) 在运行时确定对象的实际类型并调用适当的处理方法。