Introducción a C#
Por Nacho Cabanes, versión 0.93 de 16-abr-2010

6.7. Polimorfismo y sobrecarga

Esos dos constructores "Puerta()" y "Puerta(int ancho, int alto)", que se llaman igual pero reciben distintos parámetros, y se comportan de forma que puede ser distinta, son ejemplos de "polimorfismo" (funciones que tienen el mismo nombre, pero distintos parámetros, y que quizá no se comporten de igual forma).

Un concepto muy relacionado con el polimorfismo es el de "sobrecarga": dos funciones están sobrecargadas cuando se llaman igual, reciben el mismo número de parámetros, pero se aplican a objetos distintos, así:

 
puerta.Abrir ();
libro.Abrir ();
 

En este caso, la función "Abrir" está sobrecargada: se usa tanto para referirnos a abrir un libro como para abrir una puerta. Se trata de dos acciones que no son exactamente iguales, que se aplican a objetos distintos, pero que se llaman igual.

6.8. Orden de llamada de los constructores

Cuando creamos objetos de una clase derivada, antes de llamar a su constructor se llama a los constructores de las clases base, empezando por la más general y terminando por la más específica. Por ejemplo, si creamos una clase "GatoSiamés", que deriva de una clase "Gato", que a su vez procede de una clase "Animal", el orden de ejecución de los constructores sería: Animal, Gato, GatoSiames, como se ve en este ejemplo:

/*---------------------------*/
/*  Ejemplo en C# nº 62:     */
/*  ejemplo62.cs             */
/*                           */
/*  Cuarto ejemplo de clases */
/*  Constructores y herencia */
/*                           */
/*  Introduccion a C#,       */
/*    Nacho Cabanes          */
/*---------------------------*/
 
using System;
 
public class Animal
{
 
  public Animal() 
  {
    Console.WriteLine("Ha nacido un animal");
  }
}
 
// ------------------
 
public class Perro: Animal
{
 
  public Perro() 
  {
    Console.WriteLine("Ha nacido un perro");
  }
}
 
// ------------------
 
public class Gato: Animal
{
 
  public Gato() 
  {
    Console.WriteLine("Ha nacido un gato");
  }
}
 
 
// ------------------
 
public class GatoSiames: Gato
{
 
  public GatoSiames() 
  {
    Console.WriteLine("Ha nacido un gato siamés");
  }
}  
 
// ------------------
 
public class Ejemplo62
{
 
  public static void Main()
  {
    Animal a1     = new Animal();
    GatoSiames a2 = new GatoSiames();
    Perro a3      = new Perro();
    Gato a4       = new Gato();
  }
 
}
 

El resultado de este programa es:


Ha nacido un animal
Ha nacido un animal
Ha nacido un gato
Ha nacido un gato siamés
Ha nacido un animal
Ha nacido un perro
Ha nacido un animal
Ha nacido un gato

Ejercicio propuesto: