Fight()なら
Fighter F
Magician M
Slime S
Flame F
MetalSlime MS
として
OptimalActsという関数テーブルを用意して
     F       M
S    Slash() Fire()
F Slash() Blizzard()
MS Use(holywater) Use(holywater)
その通りに呼び出せばよいし、OptimalActsをとるかどうかは、MonsterKnowledgeで制御すればいい
MonsterKnowledgeはmutableでなければならないし、OptimalActsはimmutableでもよい。

>>663
俺の指摘は、この問題を特にあたってJavaがCよりも有利な解決策を持ってないってことを示しているだけなんだけど
よくRPGを使ってオブジェクト指向を例示する本があるけどさ、あれって無意味だと思うんだよね
こういうちょっとでも問題が複雑になるとJavaはあまりにも無力だろ