2. Herencia
"La herencia es un mecanismo que permite la
definición de una clase a partir de la definición
de otra ya existente. La herencia permite
compartir automáticamente métodos y datos
entre clases, subclases y objetos."
3. Herencia
El siguiente ejemplo es un caso en el que vamos
a simular el comportamiento que tendrían los
diferentes integrantes de la selección española de
futbol; definiendo tres clases que van a
representar objetos Futbolista, Entrenador y
Masajista. De cada unos de ellos vamos a
necesitar algunos datos que reflejaremos en
los atributos y una serie de acciones que
reflejaremos en sus métodos. Estos atributos y
métodos los mostramos en el siguiente diagrama
de clases:
4. Herencia
En las tres clases tenemos atributos y métodos que son iguales ya que los
tres tienen los atributosid, Nombre, Apellidos y Edad; y los tres tienen los
métodos de Viajar y Concentrarse
5. Herencia
A nivel de código tenemos lo siguiente tras ver el diagrama de clases
6. Herencia
En este punto es que estamos escribiendo mucho código repetido ya
que las tres clases tienen métodos y atributos comunes, de ahí y
como veremos enseguida, decimos que la herencia consiste en
"sacar factor común" para no escribir código de más, por tanto lo
que haremos sera crearnos una clase con el "código que es común a
las tres clases" (a esta clase se le denomina en la herencia
como"Clase Padre o SuperClase") y el código que es especifico de
cada clase, lo dejaremos en ella, siendo denominadas estas clases
como"Clases Hijas", las cuales heredan de la clase padre todos los
atributos y métodos públicos o protegidos. Es muy importante decir
que las clases hijas no van a heredar nunca los atributos y métodos
privados de la clase padre
9. Herencia
Como se puede observar queda un código más limpio, estructurado y
con menos líneas de código, lo que lo hace más legible, y es un código
reutilizable, lo que significa que ahora si queremos añadir más clases a
nuestra aplicación como por ejemplo una clase Médico, Utiller@, Jefe/a
de prensa etc. que pertenezcan también al equipo técnico de la
selección, lo podemos hacer de forma muy sencilla ya que en la clase
padre (SeleccionFutbol) tenemos implementado parte de sus datos y de
su comportamiento y solo habrá que implementar los atributos y
métodos propios de esa clase.
10. Herencia
En el código que se ha escrito hay dos palabras reservadas que son "extends",
"protected" y "super". El significado de ellas es el siguiente:
extends: Esta palabra reservada, indica a la clase hija cual va a ser su clase padre,
es decir que por ejemplo en la clase Futbolista al poner "public class Futbolista
extends SeleccionFutbol" le estamos indicando a la clase 'Futbolista' que su clase
padre es la clase 'SeleccionFutbol' o dicho de otra manera le decimos a la clase
'Futbolista' que se 'copie' todos los atributos y métodos públicos o protegidos de
la clase 'SeleccionFutbol'.
protected: sirve para indicar un tipo de visibilidad de los atributos y métodos de
la clase padre y significa que cuando un atributo es 'protected' o protegido, solo
es visible ese atributo o método desde una de las clases hijas y no desde otra
clase.
super: sirve para llamar al constructor de la clase padre.
11. Polimorfismo
El Polimorfismo es uno de los 4 pilares de la
programación orientada a objetos (POO) junto con
la Abstracción, Encapsulación y Herencia. Este
termino se utiliza en la POO para “referirse a la
propiedad por la que es posible enviar mensajes
sintácticamente iguales a objetos de tipos distintos“.
12. Polimorfismo
El Polimorfismo es uno de los 4 pilares de la programación
orientada a objetos (POO) junto con
la Abstracción, Encapsulación y Herencia. Este termino se
utiliza en la POO para “referirse a la propiedad por la que
es posible enviar mensajes sintácticamente iguales
a objetos de tipos distintos“. Vamos a colocar el ejemplo
anterior en la que queríamos simular el comportamiento
que tendrían los diferentes integrantes de la selección
española de fútbol
15. Polimorfismo
Al ver este código notamos que se utiliza dos veces la palabra
reservada “abstract“. Esta palabra nos indica que la clase
“SeleccionFutbol” es una clase abstracta y las clases abstractas no se
pueden instanciar, por tanto nunca podremos hacer un “new
SeleccionFutbol()”. Otra cosa que vemos es que también utilizamos
la palabra reservada abstract en un método (en el método
entrenamiento). Esto quiere decir que todas las clases hijas de la
clase “SeleccionFubol” tienen que tener implementado ese método
obligatoriamente. Por tanto con esto que se acaba de contar y
diciendo que la palabra “Polimorfismo” significa “muchas formas”,
podéis deducir que la clase “SeleccionFutbol” es una clase que puede
adoptar diferentes formas y en este ejemplo puede adoptar las
formas de“Futbolista”, “Entrenador” y “Masajista”.
16. Polimorfismo
Una cosa muy buena que tiene la herencia y el
polimorfismo, es que las clases hijas no solo
heredan los métodos (o la implementación de los
métodos) de las clases padre, sino que las clases
hijas se pueden especializar. Esto significa que una
clase hija puede “redefinir” los métodos de su clase
padre; es decir, que se puede volver a escribir ese
método y de ahi la especialización.
20. Polimorfismo
Como vemos en el código todas las clases hijas tienen implementada
el método “entrenamiento()” ya que al tenerlo en la clase padre como
método abstracto, es obligatorio que todas las clases hijas tengan ese
método. Por otro lado observamos en el código que encima del
método “entrenamiento()” y otros métodos, tenemos la etiqueta
“@Override“. Esta etiqueta sirve para indicar en el código que
estamos“re-escribiendo o especializando” un método que se
encuentra en la clase padre y que queremos redefinir en la clase hija.
Esta etiqueta solo y exclusivamente esta en los métodos de las clases
hijas que tenemos definida en la clase padre, por tanto cuando se
llame a esos métodos, las clases hijas ejecutaran el método redefinido
en la clase hija y las que no lo hayan redefinido se ejecutará es
método de la clase padre.
22. Polimorfismo
El polimorfismo es un concepto un poco más
avanzado que la herencia y puede ser muy útil a la
hora de jerarquizar y querer dar un patrón de
comportamiento común a una serie de objetos que
heredan de la misma clase.