La herencia es un mecanismo que permite la definicin de una clase a partir de la definicin de
otra ya existente. La herencia permite compartir automticamente mtodos y datos entre clases, subclases y objetos. La herencia est fuertemente ligada a la reutilizacin del cdigo en la OOP. Esto es, el cdigo de cualquiera de las clases puede ser utilizado sin ms que crear una clase derivada de ella, o bien una subclase. Hay dos tipos de herencia: Herencia Simple y Herencia Mltiple. La primera indica que se pueden definir nuevas clases solamente a partir de una clase inicial mientras que la segunda indica que se pueden definir nuevas clases a partir de dos o ms clases iniciales. Java slo permite herencia simple. La herencia permite definir clases (subclases) a partir de otra clase ms genrica (superclase). La herencia potencia la reutilizacin de cdigo, genera cdigo ms fiable y robusto y reduce el coste de mantenimiento.
Object es la clase base (superclase) de todas las dems clases. Si una clase no especifica extends, entonces se entiende que deriva de Object Todas las clases derivan directa o indirectamente de Object.
Jerarqua de clases Java permite mltiples niveles de herencia pero no la herencia multiple, es decir una clase puede heredar directamente de una clase ascendiente. Por otro lado, una clase puede ser ascendiente de tantas clases descendiente como se desee (un unico padre, multitud de hijos).
Utilizacin o Para extender la funcionalidad de la clase padre o Para especializar el comportamiento de la clase padre
Superclase y Subclases El concepto de herencia conduce a una estructura jerrquica de clases o estructura de rbol, lo cual significa que en la OOP todas las relaciones entre clases deben ajustarse a dicha estructura. En esta estructura jerrquica, cada clase tiene slo una clase padre. La clase padre de cualquier clase es conocida como su superclase. La clase hija de una superclase es llamada una subclase. La subclase rene todas las propiedades de la superclase, adems de las suyas propias. o Una superclase puede tener cualquier nmero de subclases. o Una subclase puede tener slo una superclase Una subclase hereda todos los mtodos y atributos de la superclase excepto: Atributos y mtodos privados Constructores (no se heredan pero s se ejecutan)
A es la superclase de B, C y D. D es la superclase de E. B, C y D son subclases de A. E es una subclase de D. La clase hija pasa a tener lo que tiene la clase padre o Atributos o Mtodos Un objeto de la clase hija es tambin un objeto de la clase padre
Sintaxis: Se indica usando la palabra reservada extends public class ClaseB extends ClaseA { // Declaracion de atributos y metodos especificos de ClaseB // y/o redeclaracion de componentes heredados }
Visibilidad: Los miembros privados de la superclase no son visibles desde la subclase Los miembros pblicos de la superclase son visibles y siguen siendo pblicos en la subclase Se puede acceder a los miembros de la superclase usando la palabra reservada super Si una clase se declara como final no se puede heredar de ella En java, todas las clases heredan implcitamente de la clase Object.
Herencia y constructores La subclase necesita normalmente que se ejecute el constructor de la superclase antes que su propio constructor para inicializar las variables de instancia heredadas. La solucin consiste en utilizar la palabra reservada super seguida entre parntesis de los parmetros correspondiente en el cuerpo del constructor de la subclase. Es decir, incluir la siguiente sentencia como primera lnea de cdigo:
super(argumentos opcionales);
De esta forma la implementacin de un constructor de la clase descendiente slo necesita inicializar directamente las variables de instancia no heredadas. Si no aparece como primera sentencia, el compilador inserta una llamada implcita super(); que inicializa las variables de instancia a cero, false, carcter nulo o null dependiendo de su tipo. Esta llamada en cadena a los constructores de las clases ascendientes llega hasta el origen de la jerarqua de clases, es decir, hasta el constructor de la clase Object. En cualquier caso, la creacin de una nueva instancia mediante un constructor debe tener tres fases: 1. Llamada al constructor de la clase ascendiente 2. Se asignan valores a los atributos 3. Se ejecuta el resto del constructor Los constructores en la herencia Cuando creamos un objeto de una subclase, el constructor de la clase padre tambin se ejecuta:
Primero se ejecuta el constructor de la superclase y luego el de la subclase
Ventajas y desventajas: Ventajas: Se ahorra cdigo Permite reutilizar cdigo extendiendo su funcionalidad Desventajas Se ahorra cdigo Se introduce una fuerte dependencia en la clase hija respecto a la clase padre Puede dificultar la reutilizacin Un cambio en la clase padre puede tener efectos imprevistos en las clases hijas Un objeto de una clase hija puede tener un comportamiento inconsistente con lo esperado de un objeto de la clase padre Se establece una jerarqua o clasificacin. Si cambia el criterio de clasificacin puede acarrear muchas modificaciones