Vamos a continuar con este ejercicio de conversiones de objetos.
Vamos a crear ahora una clase de prueba sobre estos packages damos el derecho nio a la clase y la clase
se llama prueba conversión objetos y la depositamos en el paquete de test damos clic en Finalizar quitamos
estos comentarios con controlé y agregamos un método.
Ahora vamos a empezar a crear un objeto primero de la más alta jerarquía es decir un tipo de la clase
padre.
Declaramos la variable de tipo padre
importamos esta clase y con esta variable vamos a ver que podemos apuntar a diferentes tipos siempre
y cuando sean parte de la relación de las clases.
En este caso pueden ser del mismo tipo es decir un objeto de tipo empleado o un tipo de las clases hijas
como puede ser un objeto de tipo gerente o un objeto de tipo escritor así que esta variable puede apuntar
a diferentes objetos en tiempo de ejecución así que lo que vamos a hacer es que vamos a asignar una
referencia de un objeto de menor jerarquía así que utilizando la misma variable de empleado vamos a
crear un nuevo objeto de la clase escritor.
Le asignamos el nombre de rey.
Posteriormente el sueldo de 5 000 y también proporcionamos el tipo de escritura
en este caso vamos a proporcionar el valor de clásico pueden seleccionar cualquier opción de la numeración
importamos esta clase y podemos ver que ya tenemos nuestra línea de código en la cual una variable de
tipo empleado está apuntando a un objeto de menor jerarquía.
Así que sin problemas el compilador nos deja hacer esta asignación.
Sin embargo si quisiéramos mandar a llamar por ejemplo el método de la clase escritor tipo de escritura
en texto vamos a intentar hacerlo si escribimos empleado punto y solicitamos los métodos G.T disponibles
podemos observar que no podemos acceder al tipo de escritura.
Incluso si escribimos todo el nombre de este método qué tipo de escritura en texto
vamos a poner todo el nombre del método podemos observar que la variable empleado no puede acceder a
este método debido a que el tipo que estamos utilizando únicamente puede acceder a los métodos que tenemos
en común entre estas clases es decir entre la clase empleado y entre la clase gerente o escritor en
este caso con la clase escritor y la clase empleado.
El único método que tenemos en común es el método obtener detalles así que este método tipo de escritura
no lo podríamos mandar a llamar directamente.
Para ello precisamente es que vamos a hacer una conversión pero eso lo vamos a ver posteriormente.
De momento vamos a mandar a llamar el método obtener detalles y esto ya lo vimos elecciones anteriores
donde se aplica el polimorfismo y el método que se va a ejecutar va a ser el método del objeto al cual
esté apuntando en memoria.
Es decir que en este caso la variable empleado está apuntando a un objeto de tipo escritor.
Por lo tanto el método a obtener detalles que se va a ejecutar va a ser el de la clase escritor aunque
la variable sea de tipo empleado el método que se ejecuta es el del objeto al cual está apuntando en
memoria y este método nos regresa un estreno.
Por lo tanto lo podemos mandar a imprimir
con el método LN guardamos cambios ejecutamos simplemente para comprobar que todo está funcionando correctamente
y podemos observar el nombre de rey el sueldo de 5000 y el tipo de escritura escritura a mano.
Así que con esto estamos observando que se está ejecutando el método de la clase hija obtener detalles
ya que estamos observando el tipo de escritura ya que el método de la clase empleado obtener detalles
no incluye el tipo de escritura así que hasta aquí está funcionando correctamente el polimorfismo.
Pero ahora si quisiéramos ejecutar el método qué tipo de escritura en texto lo que tenemos que hacer
es una conversión hacia abajo es decir que la variable empleado la podemos convertir a un tipo escritor
para que podamos acceder a este método.
Esto lo podemos hacer de dos maneras podemos declarar una variable de tipo escritor puede ser cualquier
nombre le ponemos escritor y le asignamos la variable de empleado
y podemos observar que el compilador nos está indicando que debemos hacer un cast es decir una conversión
y la conversión básicamente la hacemos poniendo del lado izquierdo el tipo al cual queremos convertir
esta variable.
Esto es muy similar a los tipos primitivos pero en este caso estamos trabajando con objetos así que
la variable de tipo empleado la estamos convirtiendo a tipo escritor y lo estamos asignando a una variable
de tipo escritor.
De esta manera ahora si la variable escritor como es de tipo escritor puede acceder a los métodos que
se han definido en esta clase y sin ningún problema podemos acceder a este método Goeth tipo de escritura
en texto
imprimimos este mensaje que nos regresa este método
podemos ver que no hay ningún problema de compilación.
Guardamos cambios y ejecutamos y podemos llevar el mensaje escritura a mano que fue precisamente el
tipo de escritura que asignamos al momento de crear este objeto.
Esta es una forma de hacer la conversión.
Esta es la primer forma pero también tenemos una segunda forma que es al vuelo así que con la misma
variable de empleado
el lugar en lugar de asignarle a una variable podemos simplemente hacer la conversión al vuelo es decir
del lado izquierdo especificamos el tipo de dato al cual queremos convertir y ponemos todo entre paréntesis
y básicamente con esto le estamos diciendo al compilador que la variable empleado la vamos a convertir
a un tipo de escritor y si ponemos punto podemos observar que podemos acceder al método qué tipo de
escritura en texto lo podemos mandar a imprimir simplemente para comprobar que esto funciona sin ningún
problema
guardamos cambios y ejecutamos
y podemos observar que tenemos el mismo resultado.
Escritura a mano y escritura a mano así que cualquiera de las dos conversiones que hagamos ya sea asignándole
a una variable o haciendo la conversión al vuelo simplemente poniéndolo entre paréntesis.
Podemos convertir este tipo de dato en el tipo de dato deseado y de esta forma acceder a los métodos
disponibles en la clase a la cual estamos convirtiendo.
En este caso a una clase e hija y como siguiente paso vamos a utilizar la misma variable de empleado
simplemente para comprobar que funciona correctamente nuestro código.
Pero ahora le vamos a asignar un objeto de tipo gerente es decir la otra clase hija
le asignamos el nombre de Laura el sueldo de 6000
y el área de sistemas importamos la clase gerente y podemos sustituir estas líneas simplemente poniendo
asterisco para no importar cada una de las clases por separado.
Y podemos ver que esta línea funciona sin ningún problema.
Es decir que la variable de tipo padre de tipo empleado puede apuntar a objetos del mismo tipo o de
tipos hijo pero si quisiéramos acceder al método o departamento de la clase gerente sucede exactamente
lo mismo que revisamos anteriormente directamente la clase empleado no puede acceder al método departamento.
Si quisiéramos hacer esto tenemos que hacer una conversión
hacemos la conversión hacia la clase gerente ponemos todo entre paréntesis y si ponemos punto podemos
observar que ya podemos acceder al método departamento mandamos a imprimir esto simplemente para comprobar
que funciona
guardamos cambios ejecutamos
y podemos observar que podemos acceder al departamento en este caso el departamento de sistemas así
que básicamente en esto consiste la conversión de objetos.
Podemos tener una variable que apunta a objetos de tipo hijo en tiempo de ejecución pero el momento
de tratar de acceder a los métodos de la clase fija en muchos casos no vamos a poder acceder directamente
a estos métodos con la variable de tipo padre así que por ello es que necesitamos hacer una conversión
a la clase de tipo hijo para que podamos acceder nuevamente a los métodos definidos en las clases hijas
y dependiendo del tipo al cual queramos convertir.
Tenemos que hacer la conversión ya sea por ejemplo en este caso a la clase escritor o en este caso a
la clase hija de tipo gerente bien eso es todo por esta elección y nos vemos en el siguiente vídeo.
Saludos.