El polimorfismo es otro de los pilares fundamentales de la
programación orientada a objetos. Es la capacidad de almacenar objetos de un
determinado tipo en variables de tipos antecesores del primero a costa, claro
está, de sólo poderse acceder a través de dicha variable a los miembros comunes
a ambos tipos. Sin embargo, las versiones de los métodos virtuales a las que se
llamaría a través de esas variables no serían las definidas como miembros del
tipo de dichas variables, sino las definidas en el verdadero tipo de los
objetos que almacenan.
A continuación se muestra un
ejemplo de cómo una variable de tipo Persona puede
usarse para almacenar objetos de tipo Trabajador.
En esos casos el campo Sueldo del
objeto referenciado por la variable no será accesible, y la versión del método Cumpleaños() a la que se podría llamar a través de la
variable de tipo Persona sería
la definida en la clase Trabajador, y
no la definida en Persona:
using System;
class Persona
{
public string Nombre; // Campo de cada objeto Persona que
almacena su nombre
public int Edad; // Campo de cada objeto Persona que almacena su edad
public string NIF; // Campo de cada objeto Persona
que almacena su NIF
public virtual void Cumpleaños() // Incrementa
en uno la edad del objeto Persona
{
Console.WriteLine(“Incrementada
edad de persona”);
}
public Persona (string nombre, int edad,
string nif) // Constructor de Persona
{
Nombre
= nombre;
Edad
= edad;
NIF
= nif;
}
}
class
Trabajador: Persona
{
int Sueldo; // Campo de cada objeto
Trabajador que almacena cuánto gana
Trabajador(string nombre, int edad, string
nif, int sueldo): base(nombre, edad, nif)
{ // Inicializamos cada Trabajador en base al
constructor de Persona
Sueldo = sueldo;
}
public override Cumpleaños()
{
Edad++;
Console.WriteLine("Incrementada
edad de trabajador");
}
public static void Main()
{
Persona p = new
Trabajador("Josan", 22, "77588260-Z", 100000);
p.Cumpleaños();
//
p.Sueldo++; //ERROR: Sueldo no es miembro de Persona
}
}
El mensaje mostrado por pantalla
al ejecutar este método confirma lo antes dicho respecto a que la versión de Cumpleaños() a la que se llama, ya que es:
Incrementada edad
de trabajador