Hola y bienvenidos a esta elección.
A continuación estudiar el tema de la palabra instance off en Gavá.
Están listos.
Vamos bien vamos a ver nuestro aire y vamos a apoyarnos del proyecto que ya hemos creado.
El ejemplo polimorfismo vamos a cerrar estas clases y vamos a clonar este proyecto como lo hicimos en
el ejercicio anterior.
Damos un derecho damos siguen copy
y este proyecto se va a llamar ejemplo instance
que significa instancia de algún tipo lo depositamos en la carpeta de cursos.
Posteriormente Java sigue en copy
ahora vamos a modificar el nombre de este proyecto de ejemplo Instant Zoff.
Damos clic derecho reinen y modificamos el display y el artifacts Heidi para que coincida con el nombre
del fólder.
Ejemplo instances of
ideamos siguen okay y con esto ya podemos cerrar el ejemplo de polimorfismo.
Damos clic derecho Claws
vamos a utilizar las mismas clases pero vamos a modificar el nombre del paquete damos clic derecho refractor
reanime se va a llamar.
Ejemplo Instant Zoff.
Damos clic en el factor y vamos a utilizar las mismas clases de la clase de empleado que es la clase
padre y la clase hija de la clase gerente y vamos a crear una clase de prueba.
Vamos a cambiar el nombre.
Clic derecho benefactor Rainey y se va a llamar.
Ejemplo Instant Zoff y damos siguen rFactor abrimos nuestra clase y vamos a poner ahora a prueba este
concepto de Instant Zoff.
En este ejercicio lo que hicimos fue crear dos objetos un objeto de tipo empleado y otro objeto de tipo
gerente y creamos un método llamado imprimir detalles.
En este momento vamos a cambiar el nombre de este método y ahora se va a llamar determina tipo así que
para modificar todos los usos de este método podemos presionar contra control R para renombrar el nombre
de este método y se va a llamar determina tipo y damos un Rfactor y este método entonces lo que va a
hacer es muy similar al ejemplo de polimorfismo donde recibimos una instancia por ejemplo en este caso
de un objeto de tipo empleado o un objeto de tipo gerente pero lo va a recibir una variable de tipo
empleado es decir una variable de tipo padre vamos a quitar el contenido de este método.
Y para utilizar la palabra Instant Zoff vamos a hacer lo siguiente Vamos a preguntar si la variable
empleado es una instancia del tipo padre y en cuyo caso podemos acceder a ciertas propiedades de la
clase padre o de lo contrario podemos preguntar si es una instancia
de la clase hija
si es de tipo padre podemos mandar a llamar.
Por ejemplo el método del nombre sólo por poner un ejemplo y mandamos a imprimir el nombre del empleado.
Pero en el caso de que la variable empleado esté apuntando a una instancia de tipo gerente entonces
podemos mandar a imprimir el atributo de departamento el cual no existe dentro de la clase empleado
pero podemos observar que en este caso podemos acceder al método de departamento definido en la clase
e hija.
Sin embargo para poder acceder al método departamento de la clase e hija necesitamos convertir la variable
empleado de nueva cuenta asignar ahora a una variable de tipo gerente.
En este caso se está haciendo la conversión al vuelo la variable de tipo empleado definida en esta línea
como argumento la estamos convirtiendo a una variable de tipo gerente y posteriormente ponemos todo
esto entre paréntesis con lo cual estamos obteniendo de nueva cuenta la referencia al tipo gerente y
por lo tanto podemos acceder al método de departamento.
En cambio por ejemplo si en el instant Zoff de empleado deseamos hacer esto
si escribimos
departamento
podemos observar que este método no existe en el tipo empleado.
Este método únicamente existe en el tipo gerente por lo tanto nos marca error de compilación no podemos
acceder a este método del departamento desde un tipo padre solamente podemos acceder a métodos definidos
dentro de la misma clase dentro del mismo tipo pero si queremos acceder a atributos de la clase hija
en este caso debido a que estamos en la instancia de tipo gerente se ha reconocido que la variable empleado
apunta en tiempo de ejecución a un objeto de tipo gerente.
Así es como podemos leer esta línea.
Por lo tanto entonces para poder acceder a los métodos o atributos de la clase hija primero tenemos
que convertirlo vamos a hacer la conversión por fuera para que quede más claro.
Sin embargo esta es la misma línea que se puede utilizar solamente es un código más largo el que vamos
a escribir pero es exactamente lo mismo.
Así que definimos una variable de tipo gerente
y si tratamos de asignarle la referencia de la variable empleado que tenemos aquí definida como argumento
podemos observar que esto no es posible ya que una referencia de una clase padre no la podemos asignar
directamente a una referencia de una clase e hija.
Así que para ello tenemos que hacer una conversión o también lo que se conoce como un cast indicamos
el tipo al cual queremos convertir.
En este caso al tipo de la clase e hija la clase gerente y finalmente entonces podemos mandar a imprimir
el valor utilizando la variable gerente y mandar a llamar por ejemplo el departamento vamos a poner
aquí nombre de empleado para que sepamos que está ejecutando código de la clase de empleado ya que vamos
a poner una cadena donde ponemos
departamento del gerente
vamos a poner comentarios.
Esta segunda prueba.
Primero vamos a poner a prueba la creación del objeto empleado para ver que nos responde.
Este método Instant Zoff si entra a la comprobación del tipo empleado o entra a la comprobación del
tipo gerente.
Vamos a guardar cambios y ejecutamos
y podemos observar que se está ejecutando el código del nombre del empleado.
El valor de Juan así que todo funciona según lo esperado debido a que está entrando al IHF donde el
tipo que le estamos enviando en tiempo de ejecución es un tipo empleado.
Ahora vamos a poner entre comentarios esta llamada y vamos a activar esta llamada con el tipo gerente
guardamos cambios y ejecutamos
y podemos ver que en este caso no estamos observando el tipo de departamento sino que estamos observando
exactamente lo mismo.
El nombre del empleado el valor de Carla.
Esto quiere decir que también esta variable empleado ha respondido verdadero para el tipo empleado y
aunque recibimos un tipo gerente no pudimos acceder a este código debido a que esta variable respondió
que también es una instancia off de la clase empleado así que debemos hacer una corrección cuando estamos
trabajando con Instant Zoff ya que instan Zoff como hemos visto responde verdadero a cada uno de los
tipos a los cuales pertenece.
Así que si esta variable es de tipo empleado puede apuntar a varios tipos ya sea a tipos de la clase
padre o tipos de la clase e hija.
Sin embargo para que podamos ejecutar realmente el Código como lo estamos programando primero debemos
de preguntar por la clase hija y posteriormente preguntar por la clase padre ya que el operador Instant
Zoff va a responder verdadero para cada uno de los tipos a los cuales puede apuntar
así que si queremos tener el código funcionando tal como lo hemos programado entonces tenemos que invertir
este código.
Primero debemos de preguntar por el tipo más básico es decir las clases hijas por lo tanto preguntamos
si empleado es de tipo gerente.
Primero preguntamos por el tipo hijo y en dado caso de que no coincida con el tipo de hijo entonces
ya podemos preguntar si no es de tipo hijo.
Entonces preguntamos si es de tipo padre y si es de tipo padre entonces puede acceder a los atributos
o métodos de la clase padre y con eso ya estamos programando correctamente según el flujo que habíamos
indicado para que pueda ejecutar este código de la clase E HIJA.
Primero debemos de preguntar por el tipo hijo incluso si quitamos este es y preguntamos únicamente con
IHF entonces va a responder que si es de tipo gerente y además también va a responder que si es de tipo
empleado ya que la palabra Instant Zoff responde que sí es del tipo en este caso del tipo hijo sino
también que si es del tipo padre o también responde que sí es del tipo para una jerarquía de clases
más amplia.
Por ejemplo recordemos que la clase empleado a su vez es de tipo obvie.
Así que la clase empleado también podríamos preguntar si es de tipo O bien
pero si es de tipo Object ya no podemos acceder a ninguno de los métodos debido a que los atributos
y métodos definidos en la Clase E HIJA empleado no están definidos en la clase padre object.
Así que por ello ya no podemos acceder a los métodos definidos en la clase empleado ya que no están
compartidos en la clase padre y podemos observar que únicamente nos están mostrando métodos definidos
en la clase o bien podríamos mandar a llamar por ejemplo el método string sin embargo la llamada a este
método que determina el tipo si pasamos una referencia de un objeto de tipo gerente va a responder que
sí a todas estas comprobaciones.
Por lo tanto debemos de poner primero las clases hijas posteriormente las clases padres y finalmente
las clases de mayor jerarquía.
Guardamos cambios y ejecutamos y Podemos se va el resultado debido a que tenemos únicamente IFF que
tenemos acceso al departamento de finanzas.
Posteriormente también tenemos acceso al nombre del empleado y también tenemos acceso al método autodestruyen
de la clase obvie.
Pero si agregamos ahora el IF
para determinar únicamente un tipo y no todos los tipos guardamos cambios y volvemos a ejecutar
podemos observar que en este caso ya funciona como esperaríamos únicamente estamos mostrando la información
de la clase que corresponde al tipo gerente y por lo tanto nos muestra el valor del departamento del
gerente.
El valor de finanzas así es como esperaríamos que esto funcionara sin embargo por ello estamos haciendo
esta elección de Instant Zoff para que puedan observar que si no lo manejamos correctamente este operador
de instancia va a responder que sí es un tipo de la clase hija.
También es un tipo de la clase padre y también clases padres superiores.
Pero si hacemos uso de el CIF el CIF entonces ya podemos limitar el flujo que estamos programando y
únicamente va a entrar el caso que nos interesa en este caso al tipo de la clase gerente.
Vamos a cambiar el tipo ponemos entre comentarios esto y vamos a regresar nuestro tipo de empleado.
Guardamos cambios y ejecutamos y Podemos va que únicamente estamos accediendo al IFF donde se accede
al nombre del empleado pero si quitáramos el CIF también accederemos al método de la clase obvie ya
que también va a responder que sí es de tipo de la clase Object.
Guardamos cambios y ejecutamos y podemos observar que accede al nombre del empleado pero también accede
al método de string ya que también responde que sí es de tipo empleado pero también es de tipo obvie.
Así que básicamente la palabra Instant Zoff nos va a servir para saber de qué tipo es el objeto al cual
está apuntando cierta variable pero debemos de recordar que debemos de empezar por comprobar con las
clases de menor jerarquía es decir las clases fijas y posteriormente así ir subiendo en la comprobación
ya que nos va a responder que si es de todos los tipos de la jerarquía de clases del objeto al cual
estemos preguntando bien posteriormente vamos a ver de nueva cuenta este método de conversiones de objetos.
Pero básicamente aquí lo estamos adelantando para que quedara claro este concepto de uso de la palabra
Instant Zoff y una vez que sabemos que esta variable es de tipo gerente podemos recuperar el acceso
a los métodos y atributos de la clase gerente así que con esto hemos puesto en práctica el uso de la
palabra Instant Zoff en Java nos vemos en la siguiente elección.
Saludos.