Herencia

El tercer principio de la programación orientada a objetos se refiere a la herencia y polimorfismo, el cual es un mecanismo para reutilización de clases mediante la agregación de atributos y métodos, o bien la redefinición del comportamiento en clases derivadas o heredadas desde una clase base.

Estrictamente, Java admite un sistema de herencia simple (una clase derivada tiene una clase base), pero utilizando dos relaciones distintas pueden implementarse herencia a partir de dos clases base.

En términos generales el mecanismo de herencia se puede entender como una especialización de características desde clases base a clases derivadas. La notación en UML es a través de una línea con un triángulo que inicia en la clase derivada dirigiéndose hacia la clase base. Normalmente se suele poner la clase base en la parte superior y las clases derivadas abajo.

Un adolescente es una persona con características y comportamiento propio.

Herencia

Un triángulo equilátero es un tipo especial de triángulo que tiene la propiedad de que sus lados son iguales.

Herencia

Los círculos son figuras en dos dimensiones que pueden tener perímetro y área y por lo tanto se pueden calcular de manera específica para cada uno. Óvalo y Rectángulo son figuras en dos dimensiones. Círculo es una especialización de Óvalo donde los dos radios tienen el mismo valor; y Cuadrado es una subclase de la super clase Rectángulo (que a su vez tiene una superclase Figura2D), dónde la forma de calcular su área y su perímetro es igual, pero base y altura tienen el mismo valor.

Herencia

Aquí se observa agregan algunos atributos a figura 2D y se redefinen algunos métodos, al tener la misma firma entre la clase base y las subclases, no se habla de una sobre carga y se trata de un mecanismo que se llama sobreescritura. Si se invoca getBase() o getArea() en algún objeto de la jerarquía se dice que se invoca el mismo mensaje pero que el comportamiento (los cálculos que se realizarán) son diferentes de acuerdo a la figura, este mecanismo se llama polimorfismo.

En esta jerarquía la clase Animal no puede instanciarse, tampoco ovíparo que es una de sus subclases subclase, mamífero define su forma de moverse, al igual que Ave, Pez y Reptil. Cuando se definen los métodos de interfaz, las clases son instanciables (se pueden crear objetos basados en la clase).

Herencia

En este ejemplo, cuando a cada objeto dentro de la jerarquía se le indica que se mueva con el método mover(), cada uno volará, caminará, se arrastrará o nadará dependiendo de cómo tengan implementado su propio método mover().

El término polimorfismo se refiere a que en una jerarquía de clases, cada objeto de una clase —ya sea una clase base o derivada— tiene la capacidad de responder de manera distinta ante un mismo mensaje que se implementa con invocación o llamada a un método con la misma firma en la jerarquía.

Para indicar que una clase se deriva de otra, veamos completa la declaración de clase:

Herencia