La herencia unirá estrechamente el comportamiento del gato y el perro con el de un animal. Que puede ser lo que quieres
Sin embargo, si usted está tratando de crear un universo donde todo es posible, y un animal puede cambiar su tipo, es posible que prefiera utilizar el enfoque identificador ..
Pero se puede ir más lejos.
De acuerdo con la Gang of Fours design patterns que debiera
"favor 'composición de objetos' sobre la 'herencia de clases'."
Un animal es solo un perro porque tiene una cola que se menea y ladra. En tu universo, donde con el tiempo un perro podría aprender a hablar, querrás poder modificar este comportamiento.
Puede intentar abstraer su comportamiento y, a continuación, dentro de este comportamiento, puede usar la herencia.
Con esta estructura de clases:
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; }
}
Puede configurar sus gatos y perros:
Animal dog = new Animal { Noise = new Bark(), tail = new DoggyTail() }
Animal cat = new Animal{ Noise = new Purr(), tail = new CattyTail() }
.. entonces cuando se necesita su súper raza que usted puede cambiar su comportamiento sencillo
perro.Ruido = nuevo Talk();
.. Oye, presto, tu perro puede hablar ... Si necesitas que tu perro cante, simplemente creas una nueva clase de Sing ... no se necesitan más cambios.
http://stackoverflow.com/questions/269496/inheritance-vs-aggregation –
@jleedev: Esto no es una agregación o composición. Al menos no en un sentido estricto –
Hmm, debería disminuir la velocidad. –