C++表記で次の階層を検討してください。
class A
{
public:
virtual void doStuff()=0;
virtual void doOtherStuff()=0;
};
class B:public A
{
public:
void doStuff();
void doOtherStuff();
};
class C:public A
{
public:
void doStuff();
void doOtherStuff();
};
ここで、doStuffのコードがBとCで同一であると仮定します。のベストプラクティスは何ですか
どういうわけか後者の方がきれいに見えますね。 BとCには、一般的な実装を持つ他のメソッドもあり、基礎となるモデルにはDの概念が存在しないことに注意してください。
DoStuffの共有実装を保持するクラスEを作成します
class E : class A
{
override doStuff() {}
}
クラスBとCがEから継承するようにします。これにより、BとCがAから派生したタイプである必要がある場合でも継承を維持できますが、Aと他の派生は同じ実装とBとCを共有できません。