Hola y bienvenidos a esta elección.
A continuación vamos a cuidar el tema de polimorfismo en Java están listos.
Vamos bien partiendo del ejercicio que hemos creado anteriormente de ejemplo sobre escritura vamos a
apoyarnos este proyecto para crear un nuevo proyecto lo que vamos a hacer es clonar este proyecto vamos
a dar clic derecho.
Posteriormente damos clic en copy
y ahora el proyecto se va a llamar ejemplo
polimorfismo ya que vamos a utilizar las mismas clases que ya hemos utilizado en este ejemplo de escritura
y depositamos el proyecto en la carpeta de cursos diagonal Java y damos clic en copy ahora posteriormente
cambiamos el nombre de nuestro proyecto.
Si nos posicionamos sobre este proyecto nos dice que este proyecto realmente se llama ejemplo polimorfismo
así se llama la carpeta pero debemos de cambiar el nombre del proyecto para que coincida también con
el nombre de la carpeta.
Así que sobre este proyecto vamos a dar clic derecho.
Posteriormente seleccionamos reinen podemos observar que el nombre del folder ya es ejemplo polimorfismo
pero el nombre que se despliega y el nombre del artefacto todavía dice ejemplo sobre escritura así que
vamos a cambiarlo.
Por ejemplo
polimorfismo de igual manera el arte Aydin
se va a llamar ejemplo polimorfismo y damos siguen Okkhoy
y cerramos el proyecto de ejemplo Sôber sitúa en este momento ya no lo vamos a utilizar damos clic derecho
o Claws únicamente nos quedamos con el proyecto.
Ejemplo polimorfismo y este proyecto ya incluye las clases del empleado y gerente.
Pero vamos a cambiar el nombre de este paquete damos clic derecho refractor reinen para que sea ejemplo
polimorfismo damos un factor para que también se cambie el nombre de ese paquete y finalmente la clase
de prueba también la vamos a modificar.
En este caso vamos a cambiar el nombre damos un derecho refractor reinen y se va a llamar.
Ejemplo
polimorfismo y damos siguiendo el factor
estudiado hemos hecho todas las modificaciones.
Tenemos nuestra clase de empleado que es la clase padre con dos atributos el constructor con dos argumentos
y el método obtener detalles donde imprimimos el nombre y el sueldo respectivamente y posteriormente
definimos la clase de gerente con el atributo de departamento.
Un constructor que recibe los tres argumentos de nombre sueldo y departamento.
Posteriormente este mismo constructor manda llamar el constructor de la clase padre para inicializar
los atributos de nombre y sueldo y posteriormente inicializar el atributo de la clase hija el atributo
de departamento y posteriormente reescribimos el método obtener detalles donde además de utilizar el
nombre y el sueldo de la clase padre los atributos de la clase padre.
También estamos utilizando el atributo de departamento así que básicamente esas son nuestras clases
y ahora vamos a crear la prueba de ejemplo polimorfismo.
Así que ahora vamos a modificar esta clase de ejemplo polimorfismo para poner a prueba este concepto.
Para poder aplicar el concepto de polimorfismo necesitamos primero aplicar el concepto de herencia lo
cual ya lo estamos haciendo en la clase de empleado que es la clase padre y la clase e hija que es la
clase gerente la cual extiende la clase padre la clase empleado y otro concepto que se debe de aplicar
es la escritura.
En este caso la escritura del método obtener detalles ya la estamos aplicando aquí estamos definiendo
el método padre y aquí estamos aplicando la escritura del método padre en la clase e hija para modificar
el comportamiento en la clase e hija y ahora lo que vamos a hacer es aplicar el concepto de polimorfismo
una vez que ya hemos aplicado estos dos conceptos entonces podemos ver el resultado de aplicar el concepto
de polimorfismo.
Vamos a quitar esta línea ya no vamos a imprimir directamente estas variables desde este método sino
que vamos a crear un nuevo método para imprimir estas variables
así que vamos a crear un nuevo método público estático no va a regresar nada que se va a llamar imprimir
detalles y lo que vamos a hacer es definir un objeto de tipo empleado.
La variable se llama empleado y a través de esta variable vamos a imprimir
el método obtener detalles así que después de haber creado el objeto empleado vamos a mandar a llamar
este método imprimir detalles y le pasamos la referencia del objeto empleado así que hasta aquí no hay
ningún problema no hay nada nuevo simplemente lo que vamos a hacer es pasar la referencia del objeto
empleado lo recibe.
Este método de imprimir detalles y semana llamar su método obtener detalles definido en esta misma clase
en la clase empleado vamos a guardar cambios y ejecutamos simplemente para comprobar que esto funciona
sin ningún problema y podemos ver que estamos imprimiendo los valores de nombre Juan y sueldo de mil
así que hasta aquí no hay ninguna diferencia pero ahora vamos a aplicar el concepto de polimorfismo
mandamos a llamar el mismo método obtener detalles pero en lugar de pasar un objeto que es de tipo empleado
vamos a pasar un objeto de la clase hija la variable que hemos creado de gerente y observamos que podemos
utilizar el mismo método sin ningún problema.
Este mismo método que recibe un argumento de tipo padre de la clase empleado puede recibir también una
referencia de un objeto de la clase e hija así que estamos creando un objeto de tipo gerente y el tipo
de la clase padre puede apuntar a un objeto de la clase hija sin ningún problema.
Pero aquí viene lo interesante.
Si estamos definiendo una variable de tipo empleado y estamos mandando llamar el método obtener detalles
cuál es el método que se va a ejecutar el de la clase padre obtener detalles de la clase padre o el
método obtener detalles de la clase e hija para comprobar esto vamos a ejecutar guardamos cambios y
ejecutamos y podemos observar que se está ejecutando el método definido en la clase e hija y vamos a
explicar esto lo que sucede es que una variable de tipo empleado puede apuntar a un objeto de tipo hijo
en este caso a un objeto de tipo gerente pero al momento de ejecutar el método lo que va a hacer es
ejecutar el método del objeto al cual está apuntando así que si en este caso está apuntando a un objeto
de tipo gerente y este objeto tiene definido el método obtener detalles entonces el método que se va
a ejecutar es del tipo del objeto al cual está apuntando por lo tanto el método que se ejecuta es el
definido en la clase gerente es decir el método sobre escrito en la clase gerente.
Por lo tanto si damos contra el clic sobre este método aunque nos lleva a la definición de la clase
padre realmente el método que está ejecutando es el método de la clase e hija ya que el polimorfismo
es ejecutar múltiples formas pero en tiempo de ejecución así que en este caso el compilador nos ayuda
para saber cuál es el método que se va a mandar a llamar si el de la clase fija o el de la clase padre
esto únicamente lo vamos a saber en tiempo de ejecución ya que el método que se va a ejecutar va a depender
del objeto al cual está apuntando en memoria.
En el primer caso apunta a un objeto de tipo ampliado por lo tanto el método que se manda a llamar es
el método de la clase padre pero en el segundo caso apunta a un objeto de tipo gerente es decir de la
clase hija.
Por lo tanto el método que se manda a ejecutar es el método sobre escrito en la clase e hija y por lo
tanto podemos observar que se incluye el departamento en la ejecución de la llamada.
Este método bien así que básicamente ese es el concepto de polimorfismo múltiples formas pero en tiempo
de ejecución y con una misma variable de tipo padre podemos hacer referencia a objetos del mismo tipo
es decir objetos de tipo padre pero también podemos apuntar a objetos de tipo hijo y básicamente con
esta línea podemos mandar a llamar tanto métodos de la clase padre o métodos de la clase e hija dependiendo
de cuál sea el objeto al cual está apuntando esta variable bien vamos a comentar un último cambio aquí
para ya no repetir este código ya que escribimos este mismo código tanto en la clase e hija como en
la clase padre podemos reutilizar este código del método obtener detalles de la clase padre y para ello
podemos utilizar la palabra super así que vamos a escribir Super Punto obtener detalles y con esto lo
que vamos a hacer es aprovechar lo que ya está definido en la clase padre y únicamente concatenar lo
restante de la clase e hija y debido también a que el método obtener detalles de la clase padre queda
oculto al momento de escribir el método obtener detalles en la clase e hija entonces con súper podemos
volver a acceder a los métodos ocultos de la clase padre así que poniendo súper punto y posteriormente
el método oculto de la clase padre podemos seguir mandando llamar.
Los métodos de la clase padre desde las clases hijas así que vamos a guardar cambios y deberíamos observar
el mismo resultado ya que únicamente utilizamos el Código de la clase padre así que podemos observar
que estamos imprimiendo el nombre de Juan sueldo 000 para el primer objeto y posteriormente el nombre
Carla sueldo de 2 000 departamento finanzas así que sigue funcionando sin ningún problema únicamente
reutilizamos el método de la clase padre.
Obtener detalles el cual era un método oculto debido a que el método hijo escribió este método de la
clase padre pero básicamente aquí lo que aplicamos fue el concepto de polimorfismo donde estamos definiendo
una variable que recibe referencias a objetos de tipo empleado o de tipo gerentes según sea el caso
y se manda llamar el método obtener detalles del objeto en memoria al cual está apuntando esta variable
de tipo empleado.
Así que recordemos que para aplicar el concepto de polimorfismo ya debe existir el concepto de herencia
y también debe existir el concepto de sobre escritura de métodos y finalmente podemos decidir entonces
cuál es el método que se va a mandar a llamar en tiempo de ejecución.
Ese es el concepto de polimorfismo múltiples formas en tiempo de ejecución.
Todo este ejercicio y nos vemos en el siguiente video.
Saludos.