Professional Documents
Culture Documents
Herencia
Unidad 5. Herencia.
5.1 Introducción a la herencia.
herencia simple y
herencia múltiple.
En la herencia simple, una clase sucesora hereda de una sola clase antecesora directa
(llamada clase base, en C#) , como se muestra en la Figura 5.2.1.
Las flechas en la Figura 5.2.1 representan la relación "es un" o "es una" , por lo que deben
dirigirse desde la clase sucesora hacia la antecesora.
En la herencia múltiple, al menos una clase sucesora hereda de más de una clase
antecesora directa , como se muestra en la Figura 5.3.1.
Ejemplo 1
Al diseñar la estructura de la herencia de una clase puede decidirse cuáles campos y/o
métodos de la clase no deben ser accesibles desde las clases derivadas o desde
cualquier otra parte del código.
En C# se utilizan los modificadores de acceso private, protected, public e internal para
delimitar el ámbito de un campo o método de una clase.
private
Los miembros marcados como private sólo son accesibles en el ámbito de la clase, no
desde las clases derivadas ni desde el código que crea objetos de la clase.
protected
Los miembros marcados como protected son accesibles solamente en la clase que los
define y desde las clases derivadas de ésta.
public
Los miembros marcados como public son accesibles en la clase que los define, desde las
clases derivadas y desde el código que crea objetos de la clase.
internal
Los miembros marcados como internal son accesibles dentro del mismo paquete. Un
paquete se forma utilizando un espacio de nombres.
Accesibilidad Significado
public Acceso no restringido.
Acceso limitado a la clase contenedora o a los tipos derivados de esta
protected
clase.
internal Acceso limitado al proyecto actual.
protected Acceso limitado al proyecto actual o a los tipos derivados de la clase
internal contenedora.
private Acceso limitado al tipo contenedor.
Notas:
El lenguaje C# permite redefinir miembros de la clase base en las clases derivadas, pero
el compilador emite una advertencia cuando detecta una redefinición.
Redefinición de campos.
El siguiente ejemplo muestra cómo reutilizar los identificadores de los campos de la clase
base en una clase derivada.
Ejemplo
El operador new se usa para crear objetos ( p.ej. Cuenta c = new Cuenta(); )
El modificador new se usa para ocultar un miembro heredado de un miembro de
clase base (p.ej. new public int x; )
El código del archivo Redef2.cs muestra las correcciones aplicadas a Redef.cs , para
ocultar los campos x y, evitando que el compilador emita advertencias.
a.x = 100 ;
a.y = 200 ;
b.x = 300 ;
b.y = 400 ;
b.z = 500 ;
}
}
Redefinición de métodos.
Ejemplo
Reemplazamiento de métodos.
Se puede hacer que una clase derivada cambie la implementación de un método de una
clase base, manteniendo el nombre del método.
A esta operación de reimplementar un método de una clase base en una clase derivada
se le conoce como remplazar (override) el método de la clase base.
Los métodos de la clase base que usan la palabra clave virtual reciben el nombre de
métodos virtuales y los de la clase derivada que usan la palabra clave override reciben el
nombre de métodos de reeemplazo.
Las propiedades virtuales funcionan como los métodos abstractos, salvo en lo que se
refiere a las diferencias en la sintaxis de las declaraciones e invocaciones.
Las clases que tienen métodos virtuales son instanciables, esto es, se pueden construir
objetos de esas clases.
Ejemplo:
5.9 Aplicaciones.
***Ver indicaciones de Actividades de aprendizaje