私は少し困惑しています。私は class を持っていanimalます。位置などの基本的なものを格納しているとしましょう。それで、smartAnimal拡張するクラスがありますanimal。smartAnimalユーザーの入力なしで意思決定できる機能を追加するとします。
今、私はdog拡張するクラスを持っていますanimal。smartAnimalその機能を必要としないため、拡張しません。これまでのところ、私はうまくいっています: adogは でanimalあり、 asmartAnimalはanimalです。しかし今、私はsmartDogそれが拡張されることを望んでsmartAnimalいsmartDogますが、dog. たとえば、通常dogの 、.sniff()、.poop()、およびの多くの機能.bark()は my にも含まれている必要がありますがsmartDog、Java では多重継承が許可されていないため、コードを文字通りコピーして貼り付けない限り、そうではありません。
私が持っていた場合、構成はエレガントではないようです:
class smartDog{
smartAnimal thisSmartAnimal;
dog thisDog; }
animal...たとえば、位置などの「もの」を複製します。2 セットの位置変数を処理する必要があります。そして、 にあるプロパティの複製animal。
複数のインターフェイスを継承することも、適切な解決策のようには思えません。たとえばdog、インターフェイス.sniff()、、、.poop()および.bark()の実装を変更して再実装する必要はなく、smartDog他のクラスのために再実装する必要がないからです。
ここでのベストプラクティスは何ですか? つまり、クラスdogとsmartDog?の両方を持つことです。
編集:
いくつかのコメント/回答から、明確にさせてください。私の特定のプロジェクトでは、smartAnimal実際には、それを制御するニューラル ネットワーク全体があります。これは大量のコードであり、インターフェイスに抽象化する意味がありません。NN 機能のコアは、それを持っている動物に関係なく同じですが、各smartAnimalサブクラスは AI の「脳」の出力を異なる方法で実装します。逆に、各動物には独自の機能があり、人間が制御する場合でも、独自の AI エージェントが制御する場合でも同じように動作します。