Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1 Definición:
Clase base, clase derivada. La herencia es una propiedad esencial de la Programación Orientada a
Objetos que consiste en la creación de nuevas clases a partir de otras ya existentes. Este término
ha sido prestado de la Biología donde afirmamos que un niño tiene la cara de su padre, que ha
heredado ciertas facetas físicas o del comportamiento de sus progenitores. La herencia es la
característica fundamental que distingue un lenguaje orientado a objetos, como el C++ o Java, de
otro convencional como C, BASIC, etc. Java permite heredar a las clases características y conductas
de una o varias clases denominadas base. Las clases que heredan de clases base se denominan
derivadas, estas a su vez pueden ser clases bases para otras clases derivadas. Se establece así una
clasificación jerárquica, similar a la existente en Biología con los animales y las plantas. un ejemplo
del segundo tipo, que simule la utilización de liberías de clases para crear un interfaz gráfico de
usuario como Windows 3.1 o Windows 95. Supongamos que tenemos una clase que describe la
conducta de una ventana muy simple, aquella que no dispone de título en la parte superior, por
tanto no puede desplazarse, pero si cambiar de tamaño actuando con el ratón en los bordes
derecho e inferior. La clase Ventana tendrá los siguientes miembros dato: la posición x e y de la
ventana, de su esquina superior izquierda y las dimensiones de la ventana: ancho y alto. public
class Ventana { protected int x; protected int y; protected int ancho; protected int alto; public
Ventana(int x, int y, int ancho, int alto) { this.x=x; this.y=y; this.ancho=ancho; this.alto=alto; } //... }
La clase derivada Incrementamos la funcionalidad de la clase Ventana definiendo una clase
derivada denominada VentanaTitulo. Los objetos de dicha clase tendrán todas las características
de los objetos de la clase base, pero además tendrán un título, y se podran desplazar (se simula el
desplazamiento de una ventana con el ratón). La clase derivada heredará los miembros dato de la
clase base y las funciones miembro, y tendrá un miembro dato más, el título de la ventana. public
class VentanaTitulo extends Ventana{ protected String titulo; public VentanaTitulo(int x, int y, int
w, int h, String nombre) { super(x, y, w, h); titulo=nombre; }.
1. Se puede declarar un nuevo atributo con el mismo identificador que uno heredado, quedando
este atributo oculto. Esta técnica no es recomendable.
2. Se puede declarar un nuevo método de instancia con la misma cabecera que el de la clase
ascendiente, lo que supone su sobreescritura. Por lo tanto, la sobreescritura o redefinición
consiste en que métodos adicionales declarados en la clase descendiente con el mismo nombre,
tipo de dato devuelto y número y tipo de parámetros sustituyen a los heredados.
3. Se puede declarar un nuevo método de clase con la misma cabecera que el de la clase
ascendiente, lo que hace que éste quede oculto. Por lo tanto, los métodos de clase o estáticos
(declarados como static) no pueden ser redefinidos.
4. Un método declarado con el modificador final tampoco puede ser redefinido por una clase
derivada.
6. En general puede accederse a los métodos de la clase ascendiente que han sido redefinidos
empleando la palabra reservada super delante del identificador del método. Este mecanismo sólo
permite acceder al metodo perteneciente a la clase en el nivel inmediatamente superior de la
jerarquía de clases. La llamada al método super indica que estamos llamando a un constructor de
la clase base (pensemos que un Taxista antes que Taxista es Persona y por tanto tiene sentido
llamar al constructor de Persona antes que al de Taxista). Además gracias al número de
parámetros de la llamada a super podemos especificar cuál de los constructores de la clase base
queremos llamar. En java se pueden emplear dos palabras clave: this y super . Como vimos en la
introducción a la programación orientada a objetos, this hace alusión a todo el objeto y super hace
alusión a la parte heredada, por ello empleamos super para referenciar al constructor de la clase
base. En java los atributos y métodos de la clase base pueden cambiar su modificador de
visibilidad dentro de la clase derivada, la siguiente tabla recoge dichos cambios: Modificadores en
la clase base public private protected paquete En la clase derivada se transforman en public
inaccesible protected paquete Inaccesible significa que, a pesar de haber sido heredado, no hay
permisos en la clase derivada para poder acceder a dicho elemento inaccesible, pero aún así, se
pueden llamar a métodos de la clase base que si pueden acceder y modificar al elemento.
Recordemos que protected significa que es private, pero que al heredar no se hace inaccesible, es
decir que desde la clase derivada se puede acceder.