Наследование тесно связывает поведение кошки и собаки с поведением животного. Который может быть тем, что вы хотите.
Однако, если вы пытаетесь создать вселенную, где что-либо возможно, и животное может изменить свой тип, вы можете предпочесть использовать подход с использованием идентификатора.
Но вы можете пойти дальше.
Согласно шаблонам проектирования Gang of Fours вы должны
"Пропагандировать" композицию объекта "над" наследованием класса "."
Животное - это всего лишь собака, потому что у него виляет хвостом и оно лает. В вашей вселенной, где со временем собака может научиться разговаривать, вы захотите изменить это поведение.
Затем вы можете попытаться абстрагироваться от его поведения, а затем в этом поведении вы можете использовать наследование.
С этой структурой класса:
class Tail
{
DoYourThing()
}
class WaggyTail : Tail
{
DoYourThing()
{
// Wag
}
}
class Noise
{
DoYourThing()
}
class Bark : Noise
{
DoYourThing()
{
// Bark
}
}
class Talk : Noise
{
DoYourThing()
{
// Talk
}
}
class Animal
{
public Noise { get; set; }
public Tail { get; set; }
}
Вы можете настроить своих кошек и собак:
Animal dog = new Animal { Noise = new Bark(), tail = new DoggyTail() }
Animal cat = new Animal{ Noise = new Purr(), tail = new CattyTail() }
.. тогда когда вам нужна ваша супер порода, вы можете просто изменить их поведение
dog.Noise = new Talk ();
.. Привет, ваша собака теперь может говорить .. Если вам нужна ваша собака, чтобы петь, вы просто создаете новый класс пения ... никаких дальнейших изменений не требуется.