1
00:00:01,220 --> 00:00:02,780
Hola y bienvenidos a esta elección.

2
00:00:02,780 --> 00:00:06,440
A continuación estudiar el tema de la palabra instance off en Gavá.

3
00:00:06,560 --> 00:00:07,600
Están listos.

4
00:00:07,670 --> 00:00:14,700
Vamos bien vamos a ver nuestro aire y vamos a apoyarnos del proyecto que ya hemos creado.

5
00:00:14,720 --> 00:00:21,140
El ejemplo polimorfismo vamos a cerrar estas clases y vamos a clonar este proyecto como lo hicimos en

6
00:00:21,140 --> 00:00:22,440
el ejercicio anterior.

7
00:00:22,670 --> 00:00:25,310
Damos un derecho damos siguen copy

8
00:00:30,420 --> 00:00:33,420
y este proyecto se va a llamar ejemplo instance

9
00:00:42,600 --> 00:00:47,060
que significa instancia de algún tipo lo depositamos en la carpeta de cursos.

10
00:00:47,070 --> 00:00:49,350
Posteriormente Java sigue en copy

11
00:00:52,390 --> 00:00:55,930
ahora vamos a modificar el nombre de este proyecto de ejemplo Instant Zoff.

12
00:00:56,320 --> 00:01:03,780
Damos clic derecho reinen y modificamos el display y el artifacts Heidi para que coincida con el nombre

13
00:01:03,780 --> 00:01:05,040
del fólder.

14
00:01:05,220 --> 00:01:07,560
Ejemplo instances of

15
00:01:14,310 --> 00:01:19,970
ideamos siguen okay y con esto ya podemos cerrar el ejemplo de polimorfismo.

16
00:01:19,970 --> 00:01:21,090
Damos clic derecho Claws

17
00:01:24,130 --> 00:01:31,940
vamos a utilizar las mismas clases pero vamos a modificar el nombre del paquete damos clic derecho refractor

18
00:01:32,060 --> 00:01:33,920
reanime se va a llamar.

19
00:01:33,920 --> 00:01:37,070
Ejemplo Instant Zoff.

20
00:01:37,250 --> 00:01:42,880
Damos clic en el factor y vamos a utilizar las mismas clases de la clase de empleado que es la clase

21
00:01:42,880 --> 00:01:47,980
padre y la clase hija de la clase gerente y vamos a crear una clase de prueba.

22
00:01:48,160 --> 00:01:49,590
Vamos a cambiar el nombre.

23
00:01:49,780 --> 00:01:54,550
Clic derecho benefactor Rainey y se va a llamar.

24
00:01:54,550 --> 00:02:04,420
Ejemplo Instant Zoff y damos siguen rFactor abrimos nuestra clase y vamos a poner ahora a prueba este

25
00:02:04,420 --> 00:02:06,020
concepto de Instant Zoff.

26
00:02:06,250 --> 00:02:10,840
En este ejercicio lo que hicimos fue crear dos objetos un objeto de tipo empleado y otro objeto de tipo

27
00:02:10,840 --> 00:02:14,640
gerente y creamos un método llamado imprimir detalles.

28
00:02:14,650 --> 00:02:20,140
En este momento vamos a cambiar el nombre de este método y ahora se va a llamar determina tipo así que

29
00:02:20,140 --> 00:02:26,380
para modificar todos los usos de este método podemos presionar contra control R para renombrar el nombre

30
00:02:26,380 --> 00:02:34,740
de este método y se va a llamar determina tipo y damos un Rfactor y este método entonces lo que va a

31
00:02:34,740 --> 00:02:40,530
hacer es muy similar al ejemplo de polimorfismo donde recibimos una instancia por ejemplo en este caso

32
00:02:40,530 --> 00:02:45,960
de un objeto de tipo empleado o un objeto de tipo gerente pero lo va a recibir una variable de tipo

33
00:02:45,960 --> 00:02:51,840
empleado es decir una variable de tipo padre vamos a quitar el contenido de este método.

34
00:02:53,510 --> 00:02:58,560
Y para utilizar la palabra Instant Zoff vamos a hacer lo siguiente Vamos a preguntar si la variable

35
00:02:58,590 --> 00:03:08,950
empleado es una instancia del tipo padre y en cuyo caso podemos acceder a ciertas propiedades de la

36
00:03:08,950 --> 00:03:13,900
clase padre o de lo contrario podemos preguntar si es una instancia

37
00:03:17,080 --> 00:03:18,240
de la clase hija

38
00:03:23,430 --> 00:03:27,690
si es de tipo padre podemos mandar a llamar.

39
00:03:27,690 --> 00:03:35,250
Por ejemplo el método del nombre sólo por poner un ejemplo y mandamos a imprimir el nombre del empleado.

40
00:03:44,850 --> 00:03:51,580
Pero en el caso de que la variable empleado esté apuntando a una instancia de tipo gerente entonces

41
00:03:51,580 --> 00:03:59,350
podemos mandar a imprimir el atributo de departamento el cual no existe dentro de la clase empleado

42
00:04:02,150 --> 00:04:08,470
pero podemos observar que en este caso podemos acceder al método de departamento definido en la clase

43
00:04:08,470 --> 00:04:09,150
e hija.

44
00:04:09,230 --> 00:04:15,230
Sin embargo para poder acceder al método departamento de la clase e hija necesitamos convertir la variable

45
00:04:15,290 --> 00:04:20,120
empleado de nueva cuenta asignar ahora a una variable de tipo gerente.

46
00:04:20,330 --> 00:04:25,370
En este caso se está haciendo la conversión al vuelo la variable de tipo empleado definida en esta línea

47
00:04:25,370 --> 00:04:31,790
como argumento la estamos convirtiendo a una variable de tipo gerente y posteriormente ponemos todo

48
00:04:31,790 --> 00:04:38,210
esto entre paréntesis con lo cual estamos obteniendo de nueva cuenta la referencia al tipo gerente y

49
00:04:38,210 --> 00:04:41,480
por lo tanto podemos acceder al método de departamento.

50
00:04:41,510 --> 00:04:46,250
En cambio por ejemplo si en el instant Zoff de empleado deseamos hacer esto

51
00:04:49,200 --> 00:04:50,130
si escribimos

52
00:04:54,880 --> 00:04:55,870
departamento

53
00:04:59,210 --> 00:05:03,010
podemos observar que este método no existe en el tipo empleado.

54
00:05:03,140 --> 00:05:10,610
Este método únicamente existe en el tipo gerente por lo tanto nos marca error de compilación no podemos

55
00:05:10,610 --> 00:05:19,680
acceder a este método del departamento desde un tipo padre solamente podemos acceder a métodos definidos

56
00:05:19,860 --> 00:05:25,800
dentro de la misma clase dentro del mismo tipo pero si queremos acceder a atributos de la clase hija

57
00:05:25,860 --> 00:05:32,490
en este caso debido a que estamos en la instancia de tipo gerente se ha reconocido que la variable empleado

58
00:05:32,670 --> 00:05:36,450
apunta en tiempo de ejecución a un objeto de tipo gerente.

59
00:05:36,450 --> 00:05:38,380
Así es como podemos leer esta línea.

60
00:05:38,490 --> 00:05:44,070
Por lo tanto entonces para poder acceder a los métodos o atributos de la clase hija primero tenemos

61
00:05:44,070 --> 00:05:48,690
que convertirlo vamos a hacer la conversión por fuera para que quede más claro.

62
00:05:48,690 --> 00:05:54,000
Sin embargo esta es la misma línea que se puede utilizar solamente es un código más largo el que vamos

63
00:05:54,000 --> 00:05:55,730
a escribir pero es exactamente lo mismo.

64
00:05:56,160 --> 00:05:58,920
Así que definimos una variable de tipo gerente

65
00:06:03,030 --> 00:06:08,940
y si tratamos de asignarle la referencia de la variable empleado que tenemos aquí definida como argumento

66
00:06:09,210 --> 00:06:14,010
podemos observar que esto no es posible ya que una referencia de una clase padre no la podemos asignar

67
00:06:14,010 --> 00:06:16,920
directamente a una referencia de una clase e hija.

68
00:06:16,920 --> 00:06:23,060
Así que para ello tenemos que hacer una conversión o también lo que se conoce como un cast indicamos

69
00:06:23,060 --> 00:06:24,780
el tipo al cual queremos convertir.

70
00:06:24,800 --> 00:06:30,740
En este caso al tipo de la clase e hija la clase gerente y finalmente entonces podemos mandar a imprimir

71
00:06:32,840 --> 00:06:42,720
el valor utilizando la variable gerente y mandar a llamar por ejemplo el departamento vamos a poner

72
00:06:42,720 --> 00:06:50,540
aquí nombre de empleado para que sepamos que está ejecutando código de la clase de empleado ya que vamos

73
00:06:50,540 --> 00:06:54,260
a poner una cadena donde ponemos

74
00:07:00,100 --> 00:07:01,800
departamento del gerente

75
00:07:06,340 --> 00:07:07,630
vamos a poner comentarios.

76
00:07:07,630 --> 00:07:08,980
Esta segunda prueba.

77
00:07:08,980 --> 00:07:14,230
Primero vamos a poner a prueba la creación del objeto empleado para ver que nos responde.

78
00:07:14,230 --> 00:07:20,050
Este método Instant Zoff si entra a la comprobación del tipo empleado o entra a la comprobación del

79
00:07:20,050 --> 00:07:21,280
tipo gerente.

80
00:07:21,280 --> 00:07:23,020
Vamos a guardar cambios y ejecutamos

81
00:07:26,070 --> 00:07:29,540
y podemos observar que se está ejecutando el código del nombre del empleado.

82
00:07:29,540 --> 00:07:35,990
El valor de Juan así que todo funciona según lo esperado debido a que está entrando al IHF donde el

83
00:07:35,990 --> 00:07:40,360
tipo que le estamos enviando en tiempo de ejecución es un tipo empleado.

84
00:07:40,640 --> 00:07:48,260
Ahora vamos a poner entre comentarios esta llamada y vamos a activar esta llamada con el tipo gerente

85
00:07:48,680 --> 00:07:50,480
guardamos cambios y ejecutamos

86
00:07:53,240 --> 00:07:58,280
y podemos ver que en este caso no estamos observando el tipo de departamento sino que estamos observando

87
00:07:58,280 --> 00:07:59,270
exactamente lo mismo.

88
00:07:59,270 --> 00:08:02,020
El nombre del empleado el valor de Carla.

89
00:08:02,150 --> 00:08:08,350
Esto quiere decir que también esta variable empleado ha respondido verdadero para el tipo empleado y

90
00:08:08,360 --> 00:08:14,060
aunque recibimos un tipo gerente no pudimos acceder a este código debido a que esta variable respondió

91
00:08:14,210 --> 00:08:19,970
que también es una instancia off de la clase empleado así que debemos hacer una corrección cuando estamos

92
00:08:19,970 --> 00:08:26,180
trabajando con Instant Zoff ya que instan Zoff como hemos visto responde verdadero a cada uno de los

93
00:08:26,180 --> 00:08:28,300
tipos a los cuales pertenece.

94
00:08:28,370 --> 00:08:34,310
Así que si esta variable es de tipo empleado puede apuntar a varios tipos ya sea a tipos de la clase

95
00:08:34,310 --> 00:08:36,440
padre o tipos de la clase e hija.

96
00:08:36,500 --> 00:08:41,330
Sin embargo para que podamos ejecutar realmente el Código como lo estamos programando primero debemos

97
00:08:41,330 --> 00:08:47,000
de preguntar por la clase hija y posteriormente preguntar por la clase padre ya que el operador Instant

98
00:08:47,000 --> 00:08:51,770
Zoff va a responder verdadero para cada uno de los tipos a los cuales puede apuntar

99
00:08:54,520 --> 00:08:59,410
así que si queremos tener el código funcionando tal como lo hemos programado entonces tenemos que invertir

100
00:08:59,560 --> 00:09:00,490
este código.

101
00:09:00,490 --> 00:09:09,360
Primero debemos de preguntar por el tipo más básico es decir las clases hijas por lo tanto preguntamos

102
00:09:09,570 --> 00:09:11,580
si empleado es de tipo gerente.

103
00:09:11,580 --> 00:09:17,190
Primero preguntamos por el tipo hijo y en dado caso de que no coincida con el tipo de hijo entonces

104
00:09:17,190 --> 00:09:20,310
ya podemos preguntar si no es de tipo hijo.

105
00:09:20,310 --> 00:09:26,970
Entonces preguntamos si es de tipo padre y si es de tipo padre entonces puede acceder a los atributos

106
00:09:27,000 --> 00:09:32,640
o métodos de la clase padre y con eso ya estamos programando correctamente según el flujo que habíamos

107
00:09:32,640 --> 00:09:36,390
indicado para que pueda ejecutar este código de la clase E HIJA.

108
00:09:36,390 --> 00:09:43,500
Primero debemos de preguntar por el tipo hijo incluso si quitamos este es y preguntamos únicamente con

109
00:09:43,560 --> 00:09:48,900
IHF entonces va a responder que si es de tipo gerente y además también va a responder que si es de tipo

110
00:09:48,900 --> 00:09:54,720
empleado ya que la palabra Instant Zoff responde que sí es del tipo en este caso del tipo hijo sino

111
00:09:54,720 --> 00:10:00,240
también que si es del tipo padre o también responde que sí es del tipo para una jerarquía de clases

112
00:10:00,300 --> 00:10:01,320
más amplia.

113
00:10:01,320 --> 00:10:08,690
Por ejemplo recordemos que la clase empleado a su vez es de tipo obvie.

114
00:10:09,120 --> 00:10:15,350
Así que la clase empleado también podríamos preguntar si es de tipo O bien

115
00:10:23,560 --> 00:10:30,160
pero si es de tipo Object ya no podemos acceder a ninguno de los métodos debido a que los atributos

116
00:10:30,160 --> 00:10:34,990
y métodos definidos en la Clase E HIJA empleado no están definidos en la clase padre object.

117
00:10:35,410 --> 00:10:40,540
Así que por ello ya no podemos acceder a los métodos definidos en la clase empleado ya que no están

118
00:10:40,540 --> 00:10:46,270
compartidos en la clase padre y podemos observar que únicamente nos están mostrando métodos definidos

119
00:10:46,300 --> 00:10:53,450
en la clase o bien podríamos mandar a llamar por ejemplo el método string sin embargo la llamada a este

120
00:10:53,450 --> 00:10:59,750
método que determina el tipo si pasamos una referencia de un objeto de tipo gerente va a responder que

121
00:10:59,750 --> 00:11:02,230
sí a todas estas comprobaciones.

122
00:11:02,420 --> 00:11:07,910
Por lo tanto debemos de poner primero las clases hijas posteriormente las clases padres y finalmente

123
00:11:07,910 --> 00:11:10,160
las clases de mayor jerarquía.

124
00:11:10,280 --> 00:11:18,170
Guardamos cambios y ejecutamos y Podemos se va el resultado debido a que tenemos únicamente IFF que

125
00:11:18,170 --> 00:11:21,320
tenemos acceso al departamento de finanzas.

126
00:11:21,320 --> 00:11:27,080
Posteriormente también tenemos acceso al nombre del empleado y también tenemos acceso al método autodestruyen

127
00:11:27,950 --> 00:11:28,960
de la clase obvie.

128
00:11:30,050 --> 00:11:31,910
Pero si agregamos ahora el IF

129
00:11:36,500 --> 00:11:42,950
para determinar únicamente un tipo y no todos los tipos guardamos cambios y volvemos a ejecutar

130
00:11:48,050 --> 00:11:53,120
podemos observar que en este caso ya funciona como esperaríamos únicamente estamos mostrando la información

131
00:11:53,480 --> 00:11:59,090
de la clase que corresponde al tipo gerente y por lo tanto nos muestra el valor del departamento del

132
00:11:59,090 --> 00:11:59,530
gerente.

133
00:11:59,540 --> 00:12:04,670
El valor de finanzas así es como esperaríamos que esto funcionara sin embargo por ello estamos haciendo

134
00:12:04,730 --> 00:12:09,770
esta elección de Instant Zoff para que puedan observar que si no lo manejamos correctamente este operador

135
00:12:09,770 --> 00:12:13,540
de instancia va a responder que sí es un tipo de la clase hija.

136
00:12:13,610 --> 00:12:17,960
También es un tipo de la clase padre y también clases padres superiores.

137
00:12:17,960 --> 00:12:24,710
Pero si hacemos uso de el CIF el CIF entonces ya podemos limitar el flujo que estamos programando y

138
00:12:24,710 --> 00:12:29,180
únicamente va a entrar el caso que nos interesa en este caso al tipo de la clase gerente.

139
00:12:30,360 --> 00:12:38,280
Vamos a cambiar el tipo ponemos entre comentarios esto y vamos a regresar nuestro tipo de empleado.

140
00:12:38,280 --> 00:12:46,780
Guardamos cambios y ejecutamos y Podemos va que únicamente estamos accediendo al IFF donde se accede

141
00:12:47,020 --> 00:12:57,600
al nombre del empleado pero si quitáramos el CIF también accederemos al método de la clase obvie ya

142
00:12:57,600 --> 00:13:00,550
que también va a responder que sí es de tipo de la clase Object.

143
00:13:01,020 --> 00:13:08,050
Guardamos cambios y ejecutamos y podemos observar que accede al nombre del empleado pero también accede

144
00:13:08,050 --> 00:13:13,870
al método de string ya que también responde que sí es de tipo empleado pero también es de tipo obvie.

145
00:13:17,420 --> 00:13:23,300
Así que básicamente la palabra Instant Zoff nos va a servir para saber de qué tipo es el objeto al cual

146
00:13:23,300 --> 00:13:28,520
está apuntando cierta variable pero debemos de recordar que debemos de empezar por comprobar con las

147
00:13:28,520 --> 00:13:34,430
clases de menor jerarquía es decir las clases fijas y posteriormente así ir subiendo en la comprobación

148
00:13:34,580 --> 00:13:39,920
ya que nos va a responder que si es de todos los tipos de la jerarquía de clases del objeto al cual

149
00:13:39,920 --> 00:13:45,980
estemos preguntando bien posteriormente vamos a ver de nueva cuenta este método de conversiones de objetos.

150
00:13:45,980 --> 00:13:51,380
Pero básicamente aquí lo estamos adelantando para que quedara claro este concepto de uso de la palabra

151
00:13:51,380 --> 00:13:56,720
Instant Zoff y una vez que sabemos que esta variable es de tipo gerente podemos recuperar el acceso

152
00:13:56,870 --> 00:14:02,900
a los métodos y atributos de la clase gerente así que con esto hemos puesto en práctica el uso de la

153
00:14:02,900 --> 00:14:06,470
palabra Instant Zoff en Java nos vemos en la siguiente elección.

154
00:14:06,470 --> 00:14:07,100
Saludos.
