Herencia

La herencia es el concepto que permite que se puedan definir nuevas clases basadas en clases existentes, con el fin de re-utilizar código previamente desarrollado generando una jerarquía de clases dentro de la aplicación. Entonces, si una clase se deriva de otra, esta hereda sus atributos y métodos.

La clase derivada puede añadir nuevos atributos y métodos y/o redefinir los atributos y métodos heredados. Para que un atributo y método puedan ser heredados, es necesario que su visibilidad sea “protected”. 

 En Java, a diferencia de otros lenguajes orientados a objetos, una clase sólo puede derivar de una única clase, con lo cual no es posible realizar herencia múltiple con base en clases. El siguiente sencillo ejemplo muestra una herencia de la clase persona.
Diagrama UML







Los aspectos a destacar del código son:

a) La clase persona es una clase “normal” mientras que la clase Profesor es una subclase de Persona con ciertas peculiaridades.

b) Los objetos de la subclase van a tener campos nombre, apellidos y edad (heredados de Persona) y un campo específico IdProfesor. El constructor de una subclase ha de llevar obligatoriamente como parámetros al menos los mismos parámetros que el constructor de la superclase.

c) El constructor de la subclase invoca al constructor de la superclase. Para ello se incluye, obligatoriamente, la palabra clave super como primera línea del constructor de la subclase. La palabra super irá seguida de paréntesis dentro de los cuales pondremos los parámetros que requiera el constructor de la superclase al que queramos invocar. En este caso solo teníamos un constructor de superclase que requería tres parámetros. Si p.ej. hubiéramos tenido otro constructor que no requiriera ningún parámetro podríamos haber usado uno u otro, es decir, super(nombre, apellidos, edad) ó super(), o bien ambos teniendo dos constructores para la superclase y dos constructores para la subclase.