This article has been localized into Spanish by the community.
Herencia
La herencia es uno de los conceptos más importantes de la Programación Orientada a Objetos (POO) y uno de los fundamentos sobre los cuales está construido C#. Herencia se refiere a la capacidad de crear clases que heredan ciertos aspectos de otras clases primarias. Todo el framework de .NET se basa en el concepto de Herencia y por esto en .NET "todo es un objeto". Incluso un simple número es una instancia de una clase que se hereda de la clase System.Object, aunque .NET haga un poco de trampa acá para facilitar la vida de los usuarios y por esto se puede asignar un número directamente, sin tener que crear una nueva instancia de cada número que se vaya a usar.
La Herencia puede ser un aspecto difícil de comprender, así que comencemos con unos ejemplos simples:
public class Animal
{
public void Greet()
{
Console.WriteLine("Hello, I'm some sort of animal!");
}
}
public class Dog : Animal
{
}
Primero, definimos una clase llamada Animal, con un método llamado Greet el cual imprime un saludo en la consola. Luego definimos una clase de perro, y con el operador dos puntos ':' le decimos a C # que la clase de perro hereda de la clase de animal. Lo elegante de este método es que tiene sentido en el mundo real: un perro ES un animal. Intentemos usar las clases:
Animal animal = new Animal();
animal.Greet();
Dog dog = new Dog();
dog.Greet();
Si corres este ejemplo, notarás que aunque no hayamos definido un método Greet() para la clase Dog, todavía sabe cómo saludarnos, ya que hereda este método de la clase Animal. Sin embargo, este saludo es un poco genérico, por lo que vamos a personalizarlo cuando definamos qué animal es:
public class Animal
{
public virtual void Greet()
{
Console.WriteLine("Hello, I'm some sort of animal!");
}
}
public class Dog : Animal
{
public override void Greet()
{
Console.WriteLine("Hello, I'm a dog!");
}
}
Aparte del método Greet() en la clase Dog, debes notar dos cosas: en la clase Animal he agregado la palabra reservada "virtual" y en la clase Dog uso la palabra reservada "override"
En C#, no esta permitido sobreescribir un miembro de una clase a menos que este marcado como virtual. Sí quieres, puedes aun así acceder al método heredado, incluso después de sobre escribirlo, usando la palabra clave "base".
public override void Greet()
{
base.Greet();
Console.WriteLine("Yes I am - a dog!");
}
Sin embargo los métodos no son lo único que se hereda. De hecho, casi todos los miembros de la clase serán heredados, incluidos los campos y las propiedades. Sólo recuerda las reglas de visibilidad, como se discutió en un capítulo anterior.
Se puede tener toda una jerarquía de clases que hereden una de la otra. Por ejemplo, podríamos crear una clase Puppy que hereda de nuestra clase Dog que a su vez hereda de la clase Animal. Lo que no puede hacer en C # es que una clase herede de más de una clase al mismo tiempo. La herencia múltiple, como es conocida, no es compatible con C#.