私はJavaを初めて使用し、現在抽象クラスについて学習しています。現在、私は簡単なRPGを作成しています。と呼ばれる抽象クラスがありPerson
、これは他の2つのクラスとに拡張されているWarrior
としWizard
ます。
ここでWeapon
、attack()
またはなどの他の継承されたクラスによって上書きできるいくつかの基本的なメソッドを共有するさまざまなタイプの武器(剣、斧、弓など)を作成できる、という別の抽象クラスがあるとしますmaintenance()
。
Person
(Wizard
またはWarrior
)がattack()
ゲームのある時点でメソッドを呼び出すとき、誰が攻撃者で誰が防御者であるかを知る必要があります(ライフバーのステータス、武器の耐久性などを変更できることを示してください)。
(これは本質的に、attack()
メソッド内の2つのオブジェクトをパラメーターとして受け取ることを意味します)。
だからここで私は立ち往生しています。攻撃者と防御者の組み合わせは、、である可能性がWizard-Warrior
ありWizard-Wizard, Warrior-Wizard or Warrior-Warrior
ます。
オブジェクトがウィザードか戦士かを気にせずに、オブジェクトをパラメーターとして受け取ることができるようattack()
に、Weapon
クラスにメソッドを実装するにはどうすればよいですか?これは可能でしょうか?
たとえば、このようなことをしていますか?
void attack(Person attacker, Person defender)
{
// add method logic here
}
前もって感謝します。
最初のステップは、派生Wizard
してWarrior
からですPerson
(Personをインターフェースにすることを検討してください)。
2番目のステップは、attack(Person attacker, Person defender)
WariorやWizardではなく、Personの観点から実装します。ウォリアーとウィザードに共通するすべての方法は、人が利用できるようにする必要があります。一般的でない方法は、とは無関係にする必要がありますattack()
。
たとえば、WizardにcastBestSpell(Person target)
メソッドがある場合、WarriorにはメソッドがhitWithWeapon(Person target)
ありますが、両方のメソッドをに減らす必要がありますPerson.attack(Person target)
。ウィザードと戦士はattack(Person target)
異なる方法で実装します。1つはを呼び出すことによるものcastBestSpell
、もう1つはを呼び出すことによるものhitWithWeapon
です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加