32-Inherances (Herencias) en C#

Temas tratados en esta entrada



En C# es posible heredar campos y metodos de una clase a otra

podemos agrupar el concepto herencia en dos

  • Clase derivada(hijo)la clase que hereda de otra clase
  • Clase base(padre)la clase de que hereda

para heredar una clase se utilizan dos puntos (:)


Nel ejemplo seguiente la clase Car hereda los campos y metodos de la clase padre Vehiculo

Ejemplo

class Vehiculo  // base class (parent) 
{
  public string brand = "Ford";  // Vehiculo field
  public void honk()             // Vehiculo method 
  {                    
    Console.WriteLine("Tuut, tuut!");
  }
}

class Car : Vehiculo  // derived class (child)
{
  public string modelName = "Mustang";  // Car field
}

class Program
{
  static void Main(string[] args)
  {
    // Create a myCar object
    Car myCar = new Car();

    // Call the honk() method (From the Vehiculo class) on the myCar object
    myCar.honk();

    // Display the value of the brand field (from the Vehiculo class) and the value of the modelName from the Car class
    Console.WriteLine(myCar.brand + " " + myCar.modelName);
  }
}

Se debe utilizar las herencias para reutilizar el codigo




...

La palabra sealed

Si no desea que otras clases hereden de una clase usamos la palabra sealed

Ejemplo

sealed class Vehiculo 
{
  ...
}

class Car : Vehiculo 
{
  ...
}
        

La salida sera una mensaje de error




Polimorfismo

Polimorfismo significa "muchas formas", y ocurre cuando tenemos muchas clases que están relacionadas entre sí por herencia.

La herencia nos permite heredar campos y métodos de otra clase.

Polimorfismo utiliza esos métodos para realizar diferentes tareas.

Esto nos permite realizar una sola acción de diferentes maneras.

Por ejemplo, piense en una clase base llamada Animalque tiene un método llamado animalSound(). Las clases derivadas de animales podrían ser cerdos, gatos, perros, pájaros, y también tienen su propia implementación de un sonido animal (el cerdo gruñe y el gato maúlla, etc.):

Ejemplo

 class Animal  // Base class (parent) 
 {
   public void animalSound() 
   {
     Console.WriteLine("The animal makes a sound");
   }
 }
 
 class Pig : Animal  // Derived class (child) 
 {
   public void animalSound() 
   {
     Console.WriteLine("The pig says: wee wee");
   }
 }
 
 class Dog : Animal  // Derived class (child) 
 {
   public void animalSound() 
   {
     Console.WriteLine("The dog says: bow wow");
   }
 }        

Ahora podemos crear objetos Pig y Dog y llamar al método animalSound() en ambos:

Ejemplo

        class Animal  // Base class (parent) 
{
  public void animalSound() 
  {
    Console.WriteLine("The animal makes a sound");
  }
}

class Pig : Animal  // Derived class (child) 
{
  public void animalSound() 
  {
    Console.WriteLine("The pig says: wee wee");
  }
}

class Dog : Animal  // Derived class (child) 
{
  public void animalSound() 
  {
    Console.WriteLine("The dog says: bow wow");
  }
}

class Program 
{
  static void Main(string[] args) 
  {
    Animal myAnimal = new Animal();  // Create a Animal object
    Animal myPig = new Pig();  // Create a Pig object
    Animal myDog = new Dog();  // Create a Dog object

    myAnimal.animalSound();
    myPig.animalSound();
    myDog.animalSound();
  }
}
    

La salida sera:

The animal makes a sound
The animal makes a sound
The animal makes a sound
    


La salida no es la eserada porque el metodo de la clase base anula el metodo de la clase derivada, pero en C# tenemos dos palabras mas una para anular el metodo de la clase base virtual y la palavra override para la clase derivada

Ejemplo

    class Animal  // Base class (parent) 
{
  public virtual void animalSound() 
  {
    Console.WriteLine("The animal makes a sound");
  }
}

class Pig : Animal  // Derived class (child) 
{
  public override void animalSound() 
  {
    Console.WriteLine("The pig says: wee wee");
  }
}

class Dog : Animal  // Derived class (child) 
{
  public override void animalSound() 
  {
    Console.WriteLine("The dog says: bow wow");
  }
}

class Program 
{
  static void Main(string[] args) 
  {
    Animal myAnimal = new Animal();  // Create a Animal object
    Animal myPig = new Pig();  // Create a Pig object
    Animal myDog = new Dog();  // Create a Dog object

    myAnimal.animalSound();
    myPig.animalSound();
    myDog.animalSound();
  }
}

La salida sera:

The animal makes a sound
The pig says: wee wee
The dog says: bow wow
    


El uso de la Herencia y polimorfismo es util por la reutilizacion del codigo






Publicar un comentario

0 Comentarios