このシナリオでは、これをよりOOP的な方法でどのように実装するのかは完全にはわかりません。この場合instanceofを使用する代わりに?
- 私のゲームはスーパークラスのエンティティ
- クリーチャーズ(移動エンティティ)とStaticEntities(木/岩の/ etc)私はEntityManagerのクラスを持つエンティティ
- を拡張しています
は、次のコンテキストを考えます。
私のEntityManagerでは、自分のマウスがエンティティ上にマウスを乗せているかどうかを確認します。この場合、Entityの名前を持つパネルを表示するオーバーレイをレンダリングします。
名前の他に、「健康」や「パワー/マックスヒット」などの基本的な統計情報を表示したいと考えています。スタティックエンティティには戦闘属性はありません。クリーチャーはしかし、しかし、私はエンティティを返すので、エンティティが 'instanceof'クリーチャーであるかどうかをチェックし、そうであれば:戦闘の統計を引きます。それ以外の場合は、エンティティの名前を描画します。
この構造を設計するには、より優れた、より多くの方法がありますか?私は多形性/ OO設計によってinstanceofが回避できることを読んだ。
関連のコードスニペット:このようなクラスのsytemsで
if(hoveringEntity instanceof Creature) {
hoveringEntity = (Creature) hoveringEntity;
// Custom Util class to draw a String
Text.drawString(g, "Max hit: " + getDamage(hoveringEntity), x, y, true, Color.YELLOW, Assets.font14);
}
ようこそスタックオーバーフロー! [ツアー](ツアー)を見て回り、[ヘルプセンター](/ help)、特に[どのように良い質問をしますか?](/ help/how-to-質問)と[ここではどのような話題について聞くことができますか?](/ help/on-topic)あなたのコードの3行だけを見ることによってそれを伝える方法はありません。これはあなたのクラスの多くに影響を与える*デザイン*の質問です。 –
表示する内容を返す 'getDisplayInfo()'メソッドが必要です。次に、それをオーバーライドして、必要なだけ多くの情報を提供することができます。あなたは現時点で、「xがエンティティであればxは生き物だとしたら、それはやっているのですが」と書かれています。 – Kayaman