Herencia
Una clase puede herendar de otra para extender o particularizar a la clase original. Heredar de una clase nos permite reutilizar su funcionalidad sin tener que comenzar desde cero. Una clase sólo puede heredar de otra, pero en cambio no hay límite a número de descendientes que pueda tener. Todas las clases forman parte de una jerarquía única de clases cuya raiz es la clase Object. Una jerarquía de clases bien diseñada se caracteriza por generalizar, de forma razonable, los nombres del espacio de un problema. De esta forma, podriamos tener una jerarquía de figuras geométricas con la siguiente estructura:
|
class Rectangulo: Figura {} class Cuadrado: Rectangulo {} class Elipse: Figura {} class Circulo: Elipse {} |
Veamos como podemos utilizar
la herencia para reutilizar código y datos de la clase Figura en las clases
Rectangulo y Cuadrado:
// figura.cs
using System;
class Figura // implicitamente hereda de Object
{
float alto, ancho;
public Figura(float alto, float ancho)
{
this.alto = alto;
this.ancho = ancho;
}
public float Alto { get { return alto; } set { alto = value; } }
public float Ancho { get { return ancho; } set { ancho = value; } }
public void Mostrar()
{
Console.WriteLine("{0}: {1}x{2}", GetType(), Alto, Ancho);
}
}
class Rectangulo: Figura // hereda de Figura
{
public Rectangulo(float alto, float ancho): base(alto, ancho) {}
}
class Cuadrado: Rectangulo // hereda de Rectangulo
{
public Cuadrado(float lado): base(lado, lado) {}
public float Lado { get { return alto; } set { alto = ancho = value; } }
}
class Prueba
{
public static void Main()
{
Figura f = new Figura(1, 2);
f.Mostrar();
Rectangulo r = new Rectangulo(3, 4);
r.Mostrar();
Console.WriteLine("alto de r = {0}", r.Alto);
Cuadrado c = new Cuadrado(5);
c.Mostrar();
Console.WriteLine("Lado de c = {0}", c.Lado);
}
}
Del anterior ejemplo debemos
destacar varios aspectos:
·
Aunque no se indique
explicitamente, todas las clases heredad de la clase Object.
·
Para hacer que una clase
herede de otra debemos utilizar ":" (dos puntos) y el nombre de la
clase de la que queremos heredar después de la declaración del nombre de la
clase.
·
Se puede utilizar la palabra
reservada base para referirnos al constructor de la clase de la que hemos
heredado, de forma parecida a como utilizabamos this para referirnos al de la
propia clase.
·
Como podemos ver en el
ejemplo anterior, las clases derivadas de Figura, heredan tanto sus campos como
sus métodos.
DEMOSTRACIÓN
En Visual Studio vamos a dar click en menú File à New à Project
En la Ventana emergente le damos click a Window,
seleccionamos la opción “Console Application” y espacio Name colocamos el
nombre del proyecto que para el Ejemplo es “Demo 5 20483” y luego presionamos
el botón OK
Ahora procederemos para nuestro siguiente ejemplo a
crear una biblioteca de clases, vamos a trabajar, para ello nos situamos en la
solución de nuestro proyecto, le damos click derecho al mouse y nos dirigimos a
Add à
New Project
En la ventana que se despliega seleccionamos la opción
‘ClassLibrary’ y colocamos como nombre ‘LibreriaClase’ para luego a proceder a
dar click al botón OK
En el archivo de la Librería de clases, situamos el
puntero del mouse y damos click derecho y nos dirigimos a Add à
New Items
En la Ventana emergente seleccionamos la opción de
Class y colocamos como Nombre Persona
Luego realizamos este mismo pasó para la clase
Trabajador, y nuestra librería tiene que quedar de la siguiente forma:
Procedemos a crear los
atributos y métodos para la clase Persona
Procedemos a crear los
atributos y métodos para la clase Trabajador heredando todas las propiedades de
la clase Persona
En el archivo Program.cs
escribiremos todo el código correspondiente a la ejecución de nuestro programa:
La salida de la consola
sería la siguiente: