1 00:00:00,000 --> 00:00:01,860 Voy a volver esta cosa, eh. Vale. 2 00:00:04,599 --> 00:00:06,139 Quería hacer esto yo. 3 00:00:07,120 --> 00:00:08,179 No lo hace más. 4 00:00:08,359 --> 00:00:09,519 Más que grande así no lo puede hacer. 5 00:00:11,119 --> 00:00:11,359 Así. 6 00:00:12,839 --> 00:00:13,240 Esto. 7 00:00:13,919 --> 00:00:14,380 ¿Por qué? 8 00:00:26,320 --> 00:00:31,250 ¿Existe edad? Sí. ¿Por qué existe edad? 9 00:00:33,399 --> 00:00:35,079 Porque estendo ser vivo 10 00:00:35,079 --> 00:00:36,679 y la pillo de ser vivo. 11 00:00:37,619 --> 00:00:38,799 Perfecto. Edad existe. 12 00:00:38,939 --> 00:00:39,659 ¿Por qué se enfada? 13 00:00:41,140 --> 00:00:42,659 Porque edad es private. 14 00:00:43,399 --> 00:00:44,659 ¿Vale? Private. 15 00:00:44,659 --> 00:00:45,500 Como se diga. 16 00:00:45,500 --> 00:00:59,289 entonces no puedo acceder directamente a edad, tendré que hacer super, punto edad, misma cosa. 17 00:00:59,289 --> 00:01:20,879 Ahora, ¿qué es este super? Está llamando a este objeto, pero considerándolo no como planta, sino como ser vivo. 18 00:01:20,879 --> 00:01:25,980 Pero igualmente estoy accediendo a una variable que no está definida en esta clase 19 00:01:25,980 --> 00:01:28,040 Y que es privada para ser vivo 20 00:01:28,040 --> 00:01:32,620 Esta variable aquí es accesible solo dentro de ser vivo 21 00:01:32,620 --> 00:01:34,819 Por lo tanto, no puedo 22 00:01:34,819 --> 00:01:35,840 Entonces, ¿cómo lo hago? 23 00:01:50,390 --> 00:01:51,030 ¿Como edad? ¿Por? 24 00:01:54,219 --> 00:01:55,799 No, never in the life 25 00:01:55,799 --> 00:02:01,459 Tendré que tener un setedad 26 00:02:01,459 --> 00:02:02,519 Lo tengo el setedad 27 00:02:02,519 --> 00:02:03,019 Sí 28 00:02:03,019 --> 00:02:04,500 Uso este 29 00:02:04,500 --> 00:02:12,120 Setedad 30 00:02:12,120 --> 00:02:15,099 A edad 31 00:02:15,099 --> 00:02:25,919 Ahora, en principio, así como lo hemos hecho, no sirve de nada, pero este set de edad podría estar comprobando que esta edad es un valor válido. 32 00:02:26,240 --> 00:02:29,819 Y ahora le puedo poner que la edad de esta planta es menos 35 años. 33 00:02:31,539 --> 00:02:38,060 Sin embargo, aquí podría poner que si la edad es menor que cero, entonces ponle cero, si la edad es mayor... 34 00:02:38,060 --> 00:02:39,180 Sí, pero bueno. 35 00:02:39,180 --> 00:02:44,159 Ahora, esto me funciona 36 00:02:44,159 --> 00:02:53,310 Y si le pongo this.delante, funciona 37 00:02:53,310 --> 00:02:58,580 Y si le pongo super.delante, funciona 38 00:02:58,580 --> 00:03:00,620 ¿Por qué? 39 00:03:28,469 --> 00:03:31,750 Porque setEdad, este método aquí, es definido en ser vivo 40 00:03:31,750 --> 00:03:35,370 Entonces, si lo uso así 41 00:03:35,370 --> 00:03:38,430 Existe porque lo llama 42 00:03:38,430 --> 00:03:41,669 Porque al heredar de ser vivo 43 00:03:41,669 --> 00:03:43,830 Él también tiene acceso a este de aquí 44 00:03:43,830 --> 00:03:45,509 Además es público 45 00:03:45,509 --> 00:03:47,370 Si lo llamo así 46 00:03:47,370 --> 00:03:50,530 Le estoy diciendo, oye mira, usa sobre este objeto 47 00:03:50,530 --> 00:03:52,009 Este método 48 00:03:52,009 --> 00:03:54,150 Y es correcto porque este método 49 00:03:54,150 --> 00:03:55,409 Es de tipo planta 50 00:03:55,409 --> 00:03:58,129 Que es un ser vivo 51 00:03:58,129 --> 00:03:59,650 Y que entonces tiene este método 52 00:03:59,650 --> 00:04:01,150 Si lo uso así 53 00:04:01,150 --> 00:04:03,650 Misma cosa 54 00:04:03,650 --> 00:04:06,069 Estoy utilizando este setEdad 55 00:04:06,069 --> 00:04:08,050 Pero 56 00:04:08,050 --> 00:04:10,129 En vez de utilizarlo sobre un objeto 57 00:04:10,129 --> 00:04:11,550 De tipo planta 58 00:04:11,550 --> 00:04:15,569 Lo estoy usando sobre este objeto considerándolo un ser vivo 59 00:04:15,569 --> 00:04:19,069 Pero no importa porque el ser vivo tiene estos métodos 60 00:04:19,069 --> 00:04:22,550 Entonces, en los tres casos se puede utilizar 61 00:04:22,550 --> 00:04:23,850 ¿Sí? 62 00:04:25,730 --> 00:04:26,209 Ya está 63 00:04:26,209 --> 00:04:29,410 Entonces, ahora me he creado una planta con todas estas características 64 00:04:29,410 --> 00:04:30,769 Bla, bla, bla, bla, bla, bla 65 00:04:30,769 --> 00:04:34,560 Métodos 66 00:04:34,560 --> 00:04:36,339 Entonces 67 00:04:36,339 --> 00:04:40,500 Métodos propios de una planta 68 00:04:40,500 --> 00:04:42,139 Hemos dicho hacer fotosíntesis 69 00:04:42,139 --> 00:04:47,069 Public 70 00:04:47,069 --> 00:05:11,980 photosynthesizar que lo que hace claramente es todas las plantas hacen fotosíntesis todas 71 00:05:11,980 --> 00:05:24,980 nuestras plantas hacen fotosíntesis, que es fotosintetización, ¿vale? Perfecto. 72 00:05:25,879 --> 00:05:32,100 Más. Ahora, esto nos interesa relativamente simplemente para tener un método que sea propio de planta 73 00:05:32,100 --> 00:05:41,279 y que no exista en ser vivo, ¿vale? Ahora, lo que nos interesa también hacer es jugar un poco con el overriding. 74 00:05:41,980 --> 00:05:52,500 ¿Sí? Entonces vamos a overridear el comer, ¿sí? Por ejemplo. 75 00:05:54,279 --> 00:06:01,879 Entonces, ahora nosotros hacemos un public void comer, ¿sí? 76 00:06:03,100 --> 00:06:06,920 Y lo que hace ahora es come como una planta, ¿sí? 77 00:06:06,920 --> 00:06:09,959 ¿Cómo come la planta? 78 00:06:14,699 --> 00:06:21,939 Adquiero sales minerales desde mis raíces. 79 00:06:23,839 --> 00:06:29,699 Ahora, la idea es que cuando llamaré comer sobre un ser vivo, me dirá come ñam ñam. 80 00:06:30,339 --> 00:06:38,899 Cuando llamo comer sobre un objeto planta, me debería decir adquiero sales minerales desde mis raíces. 81 00:06:39,399 --> 00:06:41,899 ¿Sí? 82 00:06:42,420 --> 00:06:52,819 Entonces, es completamente sobrescrito el método, hace una cosa completamente distinta. 83 00:06:53,379 --> 00:07:03,509 Para el otro comer, en vez, comer con string algo, vamos a hacer una cosa un poquito distinta. 84 00:07:04,069 --> 00:07:11,470 Quiero que escriba también esto, pero quiero que antes me haga lo mismo que hace este de aquí. 85 00:07:11,470 --> 00:07:18,769 O sea, que diga que mi especie está comiendo este algo ñam ñam, que luego le pasaré suelo, por ejemplo, o agua. 86 00:07:19,370 --> 00:07:24,589 Y después diga también que adquiere sales minerales desde sus raíces. 87 00:07:25,129 --> 00:07:25,709 ¿Cómo lo hago? 88 00:07:28,720 --> 00:07:29,480 Opción número uno. 89 00:07:30,079 --> 00:07:32,019 Pillo esto y lo copio debajo. 90 00:07:34,060 --> 00:07:34,579 Lo hago así. 91 00:07:35,519 --> 00:07:36,120 Funciona. 92 00:07:38,689 --> 00:07:39,370 Muy bien. 93 00:07:39,589 --> 00:07:40,269 No funciona. 94 00:07:40,370 --> 00:07:41,029 ¿Por qué no funciona? 95 00:07:44,279 --> 00:07:44,920 No tengo problema. 96 00:07:45,100 --> 00:07:46,079 No tengo acceso a esa especie. 97 00:07:46,639 --> 00:07:47,660 Entonces, ¿cómo lo hago? 98 00:07:48,160 --> 00:08:07,360 Así. Esto me está diciendo, usa este objeto, this, pero no como esta clase, como si fuera de la clase superior, o sea, ser vivo. 99 00:08:08,819 --> 00:08:16,040 Y sobre este objeto, que ahora es de tipo ser vivo, o considéramelo de tipo ser vivo, llama comer algo. 100 00:08:16,040 --> 00:08:31,600 Entonces, no estoy llamando esto, porque esto es el comer algo de esta clase. Es el comer algo de esta clase. Es decir, esto. Me escribe lo que me tiene que escribir y después vuelvo aquí. 101 00:08:31,600 --> 00:08:41,600 Y aquí, además de haber hecho lo que hace mi clase superior, lo que hace un ser vivo, hago también lo que hace una planta. 102 00:08:42,440 --> 00:08:42,860 ¿Se entiende? 103 00:08:43,840 --> 00:08:52,820 Entonces, aquí estoy totalmente desvinculado de lo que es la otra clase. 104 00:08:53,259 --> 00:08:58,059 Aquí es sobrescrito completamente el otro método. El otro método no se usa. 105 00:08:58,059 --> 00:09:01,700 Aquí estoy sobreescribiendo el método pero diciendo 106 00:09:01,700 --> 00:09:04,399 Tú haz lo que hacen todos los seres vivientes 107 00:09:04,399 --> 00:09:08,460 Y después haces algo más, más específico para esto 108 00:09:08,460 --> 00:09:12,980 Aquí estoy sobreescribiendo, aquí estoy extendiendo lo que hace el otro 109 00:09:12,980 --> 00:09:19,059 ¿Se entiende la diferencia? ¿Dudas? 110 00:09:24,279 --> 00:09:27,440 Morir en vez lo dejo igual 111 00:09:27,440 --> 00:09:31,559 Lo dejo directamente solo en la clase ser vivo 112 00:09:31,559 --> 00:09:40,179 Si os estáis fijando, estoy intentando hacer todas las varias posibilidades para que luego, cuando ahora lo use, pueda jugar con ellos. 113 00:09:40,580 --> 00:09:45,720 Tengo un método que está solo en ser vivo, que es morir. 114 00:09:45,879 --> 00:09:53,200 Un método que está solo en planta, que es fotosintetizar. 115 00:09:54,659 --> 00:09:59,240 Y dos métodos que están en los dos sitios, o sea, se sobrescriben. 116 00:09:59,240 --> 00:10:02,679 Uno que sobrescribe completamente 117 00:10:02,679 --> 00:10:04,460 Y uno que reutiliza el primero 118 00:10:04,460 --> 00:10:05,320 Y luego lo extiende 119 00:10:05,320 --> 00:10:07,419 Cuatro casos distintos 120 00:10:07,419 --> 00:10:08,940 ¿Sí? 121 00:10:09,919 --> 00:10:10,220 Vale 122 00:10:10,220 --> 00:10:13,549 Esto es 123 00:10:13,549 --> 00:10:14,929 ¿Qué estoy haciendo aquí? 124 00:10:17,450 --> 00:10:18,090 Overreading 125 00:10:18,090 --> 00:10:18,610 ¿Vale? 126 00:10:18,730 --> 00:10:19,490 Sobrescribir 127 00:10:19,490 --> 00:10:21,990 ¿Cómo? 128 00:10:22,129 --> 00:10:23,629 ¿Podría hacer algo de shadowing? 129 00:10:32,809 --> 00:10:33,769 Para hacer una 130 00:10:33,769 --> 00:10:35,529 Una opción 131 00:10:35,529 --> 00:10:37,049 Antes nosotros hemos dicho 132 00:10:37,049 --> 00:10:38,149 La edad de esta aquí 133 00:10:38,149 --> 00:10:40,370 Se te da de cosas por el estilo 134 00:10:40,370 --> 00:11:02,559 Yo podría haber hecho un shadowing aquí de la edad, o sea, haber ocultado la edad del ser vivo y haber creado aquí otra vez int edad que me habría ocultado esta edad de aquí. 135 00:11:02,559 --> 00:11:16,580 Y entonces habría podido poner aquí directamente this.edad es igual a edad sin tener que poner esto. 136 00:11:16,700 --> 00:11:23,139 Ahora lo puedo hacer porque no estoy accediendo a esta edad de aquí, que es privada para esta clase, 137 00:11:23,679 --> 00:11:25,980 más estoy accediendo a esta edad de aquí. 138 00:11:28,450 --> 00:11:32,549 Lo dejamos así porque así luego vemos un poquito de la... 139 00:11:33,769 --> 00:11:35,450 Hacemos algo con esta edad. 140 00:11:36,370 --> 00:11:42,289 Nos paramos por ahora aquí, en el sentido de que tenemos solo dos niveles, planta y ser vivos. 141 00:11:42,389 --> 00:11:47,590 Vamos a hacer un main donde creamos plantas, creamos ser vivos, hacemos ejemplos, llamamos 142 00:11:47,590 --> 00:11:53,870 y vemos qué pasa. Tenemos estos dos ejemplos de ser vivos y plantas, vamos a utilizarlos 143 00:11:53,870 --> 00:12:02,899 para ver qué logramos. Entonces me hago una clase main, donde dentro pongo un main. 144 00:12:07,740 --> 00:12:12,960 Y ahora aquí voy a jugar con lo que tengo. ¿Qué tengo? Tengo plantas y tengo ser vivos. 145 00:12:12,960 --> 00:12:26,789 Me creo un ser vivo, new ser vivo, le tengo que dar una especie. ¿Qué especie le doy? 146 00:12:30,519 --> 00:12:47,779 La especie, ya hemos dicho su nombre, era su nombre en plan especie, un Cosus ferocis, que es, no lo sabemos. 147 00:12:47,779 --> 00:12:59,139 Y también una planta, planta, es igual a new planta de Pinus pinea, esto me lo sé. 148 00:12:59,139 --> 00:13:32,450 Pero además esto recibe más cosas, recibe la especie, recibe la altura, recibe, si, que era el otro, era un buleano, buleano hace siempre verde, true, y la edad, si, ok. 149 00:13:32,450 --> 00:13:35,070 Entonces ahora yo tengo un ser vivo 150 00:13:35,070 --> 00:13:36,269 Y una planta 151 00:13:36,269 --> 00:13:38,289 Vamos a ver que puedo hacer con ellos 152 00:13:38,289 --> 00:13:41,610 Entonces puedo hacer comer un ser vivo 153 00:13:41,610 --> 00:13:44,529 sv.comer 154 00:13:44,529 --> 00:13:47,009 ¿Qué hará esto? 155 00:13:51,350 --> 00:13:52,370 Me dice que el 156 00:13:52,370 --> 00:13:54,610 Cosus ferocis 157 00:13:54,610 --> 00:13:55,870 Está comiendo 158 00:13:55,870 --> 00:14:00,399 Está carácter demoníaco 159 00:14:00,399 --> 00:14:01,039 Lo sabéis 160 00:14:01,039 --> 00:14:12,450 Si 161 00:14:12,450 --> 00:14:14,070 Vale 162 00:14:14,070 --> 00:14:17,659 Si le pongo aquí 163 00:14:17,659 --> 00:14:20,419 ¿Qué comen los 164 00:14:20,419 --> 00:14:21,519 Cossus ferocius? 165 00:14:32,860 --> 00:14:34,059 Claramente gominolas. 166 00:14:38,480 --> 00:14:39,279 Perfecto. 167 00:14:39,960 --> 00:14:42,600 Cossus ferocius está comiendo 168 00:14:42,600 --> 00:14:43,320 gominolas. 169 00:14:43,759 --> 00:14:46,320 ¿Sí? 170 00:14:47,320 --> 00:14:49,039 ¿Esto es comer de quién es? 171 00:14:52,100 --> 00:14:53,179 De ser vivo. 172 00:14:54,320 --> 00:14:55,840 ¿Sí? Va, fenomenal. 173 00:14:56,820 --> 00:14:58,200 Ahora vamos a comer la planta. 174 00:15:06,049 --> 00:15:07,330 Adquiero sal y minerales 175 00:15:07,330 --> 00:15:08,190 desde mis raíces. 176 00:15:08,889 --> 00:15:11,509 Este de aquí lo está usando 177 00:15:11,509 --> 00:15:13,690 como comer, fijaos que 178 00:15:13,690 --> 00:15:15,529 es el mismo método 179 00:15:15,529 --> 00:15:17,889 pero este de aquí 180 00:15:17,889 --> 00:15:18,809 ahora se aplica 181 00:15:18,809 --> 00:15:20,230 a la 182 00:15:20,230 --> 00:15:23,149 planta 183 00:15:23,149 --> 00:15:25,950 y si yo le digo aquí 184 00:15:25,950 --> 00:15:28,250 gominolas 185 00:15:28,250 --> 00:15:28,889 también 186 00:15:28,889 --> 00:15:32,149 bueno, cambiamos para que se vea que son distintos 187 00:15:32,149 --> 00:15:33,409 esto suelo 188 00:15:33,409 --> 00:15:39,230 esto es 189 00:15:39,230 --> 00:15:42,460 el comer 190 00:15:42,460 --> 00:15:44,659 con un parámetro 191 00:15:44,659 --> 00:15:46,919 de ser vivo 192 00:15:46,919 --> 00:15:51,840 Esto es comer con un parámetro de la planta 193 00:15:51,840 --> 00:15:56,379 Fijaos que la primera cosa que hace es llamar el comer con algo 194 00:15:56,379 --> 00:16:00,519 Con un parámetro del ser vivo 195 00:16:00,519 --> 00:16:01,700 Es esta cosa aquí 196 00:16:01,700 --> 00:16:06,620 Y luego a continuación añadía la frase esta de aquí 197 00:16:06,620 --> 00:16:08,440 De adquiero sales minerales 198 00:16:08,440 --> 00:16:13,960 Entonces este de aquí es el segundo 199 00:16:13,960 --> 00:16:38,889 Esta es la primera llamada que hace esta cosa aquí 200 00:16:38,889 --> 00:16:41,509 La segunda llamada tiene dos líneas 201 00:16:41,509 --> 00:16:44,309 Porque la primera línea se escribe aquí 202 00:16:44,309 --> 00:16:51,250 Y la segunda línea se escribe aquí 203 00:16:51,250 --> 00:16:53,750 Esta es la llamada al verbo 204 00:16:53,750 --> 00:16:55,669 ¿Se entiende? ¿Estamos todos de acuerdo? 205 00:16:56,909 --> 00:16:57,149 ¿Sí? 206 00:16:58,389 --> 00:16:59,149 Dudas 207 00:16:59,149 --> 00:17:02,389 Ahora, vamos al 3 208 00:17:02,389 --> 00:17:10,140 Tercera prueba 209 00:17:10,140 --> 00:17:10,700 ¿Vale? 210 00:17:11,160 --> 00:17:16,869 Si yo digo 211 00:17:16,869 --> 00:17:18,910 Siso 212 00:17:18,910 --> 00:17:22,829 SV.edad 213 00:17:22,829 --> 00:17:24,430 Funciona 214 00:17:24,430 --> 00:17:30,299 ¿Por qué no? 215 00:17:33,180 --> 00:17:33,539 ¿Por qué no? 216 00:17:35,339 --> 00:17:36,960 Porque edad es privado 217 00:17:36,960 --> 00:17:39,240 No puede acceder a edad de un ser vivo 218 00:17:39,240 --> 00:17:40,099 Así 219 00:17:40,099 --> 00:17:41,480 Tendré que usar 220 00:17:41,480 --> 00:17:42,980 Getedad 221 00:17:42,980 --> 00:17:46,500 ¿Sí? 222 00:17:47,460 --> 00:17:47,859 Aquí 223 00:17:47,859 --> 00:17:49,599 La edad de mi ser vivo 224 00:17:49,599 --> 00:17:51,900 Porque por defecto le daba cero y no la he cambiado 225 00:17:51,900 --> 00:17:53,420 Correcto 226 00:17:53,420 --> 00:18:06,980 Y si ahora hago lo mismo, pero con mi planta, no hace falta esto, ¿no? 227 00:18:10,980 --> 00:18:11,799 Sí, no, esto sí. 228 00:18:13,619 --> 00:18:17,960 PL.edad, ¿por qué esto funciona? 229 00:18:33,519 --> 00:18:34,920 Este también tiene valor. 230 00:18:35,660 --> 00:18:39,309 Pero si yo hago así, no me deja. 231 00:18:45,019 --> 00:18:45,880 Tengo que hacer así. 232 00:18:46,240 --> 00:18:47,400 ¿Por qué aquí me deja y aquí no? 233 00:18:53,869 --> 00:18:55,490 Os doy una pista. 234 00:18:56,710 --> 00:18:58,509 La proyecta una planta. 235 00:18:58,509 --> 00:19:06,470 Es algo complejo. 236 00:19:07,269 --> 00:19:07,809 Como pista. 237 00:19:08,349 --> 00:19:11,130 ¿Qué proyecta una planta, un árbol? 238 00:19:11,490 --> 00:19:12,190 ¿Qué proyecta? 239 00:19:15,789 --> 00:19:17,130 Exacto, shadowing. 240 00:19:18,509 --> 00:19:19,089 ¿Os acordáis? 241 00:19:20,009 --> 00:19:23,789 Que en planta ya había vuelto a poner edad. 242 00:19:24,230 --> 00:19:26,150 Y esta edad no es privada. 243 00:19:27,329 --> 00:19:33,450 Entonces, desde planta puedo acceder tranquilamente a edad desde fuera. 244 00:19:33,450 --> 00:19:37,750 Estaré accediendo a la edad de la planta. 245 00:19:37,750 --> 00:19:45,519 Y si quisiera acceder a la edad de la planta, pero como ser vivo, podría. 246 00:20:11,599 --> 00:20:14,460 Píllame PL, que es una planta. 247 00:20:15,440 --> 00:20:20,299 Trátamela como si fuera un ser vivo y accede a su variable edad. 248 00:20:22,490 --> 00:20:22,930 ¿Se entiende? 249 00:20:24,029 --> 00:20:26,970 Pero explota, porque ahora esta es privada. 250 00:20:43,920 --> 00:20:47,000 Esta es la edad de la planta como si fuera un ser vivo. 251 00:20:52,390 --> 00:20:52,970 ¿Se entiende? 252 00:20:52,970 --> 00:21:01,920 Esta cosa de aquí ha ocultado la edad del ser vivo 253 00:21:01,920 --> 00:21:05,599 Entonces si yo accedo directamente a la edad de la planta 254 00:21:05,599 --> 00:21:07,200 Me va a pillar su edad 255 00:21:07,200 --> 00:21:10,339 Que como no es privada, puedo hacer lo que me da la gana con ella 256 00:21:10,339 --> 00:21:16,019 Si quisiera, usando este objeto, un objeto planta 257 00:21:16,019 --> 00:21:24,099 Acceder a uno de sus atributos de la clase superior 258 00:21:24,099 --> 00:21:27,039 lo puedo hacer haciendo un casting explícito 259 00:21:27,039 --> 00:21:28,839 pillo la planta 260 00:21:28,839 --> 00:21:30,599 hago un casting explícito 261 00:21:30,599 --> 00:21:31,940 a un ser vivo 262 00:21:31,940 --> 00:21:34,619 entonces ahora esta cosa de aquí 263 00:21:34,619 --> 00:21:35,539 es un ser vivo 264 00:21:35,539 --> 00:21:37,759 y le digo accede 265 00:21:37,759 --> 00:21:40,539 pero como en ser vivo el punto edad 266 00:21:40,539 --> 00:21:42,220 no puede acceder directamente porque 267 00:21:42,220 --> 00:21:44,599 el punto edad me daría un acceso a una variable 268 00:21:44,599 --> 00:21:46,000 privada y no puedo 269 00:21:46,000 --> 00:21:48,759 entonces uso el método que me permite 270 00:21:48,759 --> 00:21:50,079 leerla 271 00:21:50,079 --> 00:21:50,880 que es el getEdad 272 00:21:50,880 --> 00:22:00,359 se entiende aquí este es un ejemplo de shadowing de cómo se usa los shadowing 273 00:22:00,359 --> 00:22:04,740 de cómo se accede a las variables que han sido ocultadas 274 00:22:04,740 --> 00:22:09,779 está claro que si yo quito este método de aquí ya no puedo acceder a este 275 00:22:09,779 --> 00:22:29,880 valor puede acceder sólo a este si o no cuarta prueba que probamos hemos 276 00:22:29,880 --> 00:22:35,980 probado estos métodos aquí hemos probado esto sería una prueba sobre 277 00:22:35,980 --> 00:22:38,539 overriding, esto es una prueba 278 00:22:38,539 --> 00:22:39,799 sobre 279 00:22:39,799 --> 00:22:42,500 el otro 280 00:22:42,500 --> 00:22:44,759 vale, la pregunta 281 00:22:44,759 --> 00:22:46,059 que podía decir es esta 282 00:22:46,059 --> 00:22:48,559 una pregunta que me podía decir es esta, vale, hemos dicho 283 00:22:48,559 --> 00:22:50,519 que sv.comer 284 00:22:50,519 --> 00:22:52,440 da una cosa 285 00:22:52,440 --> 00:22:54,819 entonces me asumo 286 00:22:54,819 --> 00:22:56,859 que si yo hago 287 00:22:56,859 --> 00:22:59,359 ser vivo 288 00:22:59,359 --> 00:23:07,130 tpl.comer 289 00:23:07,130 --> 00:23:11,440 estas dos cosas darán 290 00:23:11,440 --> 00:23:19,220 lo mismo. Comer decía voy comiendo ñam. Entonces si yo lo llamo sobre un ser vivo 291 00:23:19,220 --> 00:23:27,220 me dirá voy comiendo ñam. Y si yo pillo una planta, la trato como un ser vivo y le 292 00:23:27,220 --> 00:23:43,420 digo comer, me dirá ñam. ¿Por qué? Porque en el shadowing esto funciona. Pero en el 293 00:23:43,420 --> 00:23:53,660 overriding, reading, no lo sé, lo que se hace no es tener en cuenta el tipo de la referencia, 294 00:23:54,900 --> 00:24:03,039 más gana, o sea, el tipo de donde voy a buscar la implementación del método comer es el 295 00:24:03,039 --> 00:24:09,420 tipo de la instancia. Y no obstante yo aquí tenga un objeto que te diga, sí, no, más 296 00:24:09,420 --> 00:24:11,440 Trátamelo como referencia, como un ser vivo. 297 00:24:12,079 --> 00:24:14,579 En realidad la instancia es una planta. 298 00:24:15,000 --> 00:24:17,359 Entonces me usará el método de la planta. 299 00:24:24,630 --> 00:24:34,400 ¿Dudas? ¿Preguntas hasta aquí? 300 00:24:36,079 --> 00:24:37,980 A ver, ¿qué otras cosas podemos probar? 301 00:24:38,059 --> 00:24:39,240 Podemos probar los instance of. 302 00:24:39,240 --> 00:24:57,930 A ver, sv, instance of, ser vivo. 303 00:24:57,930 --> 00:25:26,430 Estas cuatro cosas 304 00:25:26,430 --> 00:25:27,470 ¿Qué me van a poner? 305 00:25:32,630 --> 00:25:33,849 ¿Qué saldrá de aquí? 306 00:25:33,990 --> 00:25:35,349 ¿Verdadero, verdadero, falso, falso? 307 00:25:35,410 --> 00:25:37,170 ¿Falso, vero, vero, falso, vero? 308 00:25:37,349 --> 00:25:38,190 ¿Qué sale? 309 00:25:39,529 --> 00:25:40,589 ¿De aquí qué sale? 310 00:26:00,460 --> 00:26:01,680 No sé, decídmelo vosotros 311 00:26:01,680 --> 00:26:04,700 ¿SV es una instancia de ser vivo? 312 00:26:06,519 --> 00:26:07,500 ¿Quién dice true? 313 00:26:08,000 --> 00:26:12,140 ¿Quién dice falso? 314 00:26:12,180 --> 00:26:19,299 los demás que dicen 315 00:26:19,299 --> 00:26:21,880 porque han contestado 316 00:26:21,880 --> 00:26:23,400 literalmente tres personas 317 00:26:23,400 --> 00:26:25,799 uno dice 318 00:26:25,799 --> 00:26:27,779 verdadero y dos dicen falso 319 00:26:27,779 --> 00:26:33,890 verdadero 320 00:26:33,890 --> 00:26:35,589 ¿cuántos? 321 00:26:37,049 --> 00:26:38,470 ahora de repente 322 00:26:38,470 --> 00:26:39,670 soy siete 323 00:26:39,670 --> 00:26:42,170 esto 324 00:26:42,170 --> 00:26:45,859 ¿quien dice falso? 325 00:26:48,359 --> 00:26:49,140 ¿quien dice verdadero? 326 00:26:51,140 --> 00:26:52,240 tenemos un verdadero 327 00:26:52,240 --> 00:26:54,319 cinco falsos 328 00:26:54,319 --> 00:26:56,279 Esto 329 00:26:56,279 --> 00:26:58,240 Bueno, pongamos T 330 00:26:58,240 --> 00:26:59,700 True 331 00:26:59,700 --> 00:27:02,980 ¿Quién dice que esto es true? 332 00:27:04,480 --> 00:27:05,720 ¿Quién dice que esto es false? 333 00:27:07,660 --> 00:27:08,220 Nadie 334 00:27:08,220 --> 00:27:09,599 Esto es true seguro 335 00:27:09,599 --> 00:27:13,420 ¿Y esto? 336 00:27:14,259 --> 00:27:17,980 ¿Quién dice true? 337 00:27:18,799 --> 00:27:19,900 ¿Quién dice false? 338 00:27:21,759 --> 00:27:22,740 True seguro 339 00:27:22,740 --> 00:27:25,339 Esto es complejo de entender 340 00:27:25,339 --> 00:27:26,359 Pero esto es súper fácil 341 00:27:26,359 --> 00:27:28,079 Vamos a verlo 342 00:27:28,079 --> 00:27:30,779 O sea, que aquí me espero un FFTT. 343 00:27:31,920 --> 00:27:33,059 No, TFTT. 344 00:27:38,319 --> 00:27:39,079 TFTT. 345 00:27:42,980 --> 00:27:45,079 ¿SV es una instancia de ser vivo? 346 00:27:45,279 --> 00:27:46,019 ¡Claro! 347 00:27:46,240 --> 00:27:46,839 Fíjate. 348 00:27:47,539 --> 00:27:48,660 New ser vivo. 349 00:27:51,569 --> 00:27:51,650 ¿Sí? 350 00:27:52,410 --> 00:27:52,710 Vale. 351 00:27:53,569 --> 00:27:55,029 ¿Es una instancia de planta? 352 00:27:55,390 --> 00:27:55,789 No. 353 00:27:56,250 --> 00:27:59,089 Porque una planta es un ser vivo. 354 00:27:59,089 --> 00:28:03,640 Pero ser vivo no es un planta. 355 00:28:03,819 --> 00:28:03,900 ¿Sí? 356 00:28:03,900 --> 00:28:08,900 ¿Sí? Es planta que extiende ser vivo, ¿no? Ser vivo que extiende planta. 357 00:28:09,940 --> 00:28:10,160 Vale. 358 00:28:12,059 --> 00:28:16,019 PL es un ser vivo. Esto quizás es el más complejo de todos. 359 00:28:16,980 --> 00:28:20,359 Porque, no, PL es un new planta. 360 00:28:21,119 --> 00:28:23,759 Pero como planta es un ser vivo, sí también. 361 00:28:24,059 --> 00:28:30,019 Si os acordáis los cuadrados, es un cuadrado externo que es una planta, pero dentro tiene un ser vivo. 362 00:28:30,140 --> 00:28:31,740 Cada planta tiene un ser vivo dentro. 363 00:28:34,160 --> 00:28:34,339 ¿Sí? 364 00:28:35,599 --> 00:28:36,339 ¿Se entiende? 365 00:28:37,960 --> 00:28:42,220 Y entonces, este es verdadero, falso, verdadero, verdadero. 366 00:28:43,380 --> 00:28:48,559 Y usando este de aquí, puedo saber si una variable que no sé exactamente qué es, 367 00:28:49,859 --> 00:28:54,960 pues puedo saber si es un ser vivo, una planta, un objeto, un cocodrilo. 368 00:28:55,380 --> 00:29:08,750 Y si aquí pongo object, esto es un objeto. 369 00:29:10,490 --> 00:29:12,349 Y esto es un object. 370 00:29:17,140 --> 00:29:20,329 ¿Sí? 371 00:29:20,990 --> 00:29:23,630 dudas, preguntas 372 00:29:23,630 --> 00:29:26,210 vale 373 00:29:26,210 --> 00:29:29,170 sigamos, que más cosas podemos 374 00:29:29,170 --> 00:29:31,269 probar aquí, overriding, overloading 375 00:29:31,269 --> 00:29:32,690 lo hemos visto 376 00:29:32,690 --> 00:29:34,990 hemos visto los shadowing 377 00:29:34,990 --> 00:29:37,349 constructores, más o menos 378 00:29:37,349 --> 00:29:39,329 hemos visto todo lo que hemos visto ahora en esta prueba 379 00:29:39,329 --> 00:29:40,690 vale 380 00:29:40,690 --> 00:29:43,130 en estos últimos 10 minutos 381 00:29:43,130 --> 00:29:47,279 vamos a crear 382 00:29:47,279 --> 00:29:49,259 en vez de crear algo por debajo 383 00:29:49,259 --> 00:29:51,019 de planta, creamos algo 384 00:29:51,019 --> 00:29:52,940 al lado de planta, vale, animal 385 00:29:52,940 --> 00:29:55,400 animal 386 00:29:55,400 --> 00:29:56,759 extende también 387 00:29:56,759 --> 00:30:00,490 ser vivo 388 00:30:00,490 --> 00:30:06,859 public 389 00:30:06,859 --> 00:30:09,019 el animal 390 00:30:09,019 --> 00:30:11,960 me lo invento 391 00:30:11,960 --> 00:30:13,740 tiene string sonido 392 00:30:13,740 --> 00:30:19,509 public 393 00:30:19,509 --> 00:30:21,910 animal 394 00:30:21,910 --> 00:30:23,410 de 395 00:30:23,410 --> 00:30:25,230 especie 396 00:30:25,230 --> 00:30:32,799 string sonido 397 00:30:32,799 --> 00:30:36,880 lo que hace es 398 00:30:36,880 --> 00:30:40,779 super de especie 399 00:30:40,779 --> 00:30:44,250 para crear el set vivo 400 00:30:44,250 --> 00:30:45,609 y luego 401 00:30:45,609 --> 00:30:48,089 dis.sonido es igual a 402 00:30:48,089 --> 00:30:52,059 sonido, tiene un método 403 00:30:52,059 --> 00:30:53,880 especial que es public 404 00:30:53,880 --> 00:30:56,440 void 405 00:30:56,440 --> 00:30:58,099 sonar 406 00:30:58,720 --> 00:31:01,720 que lo que hace 407 00:31:01,720 --> 00:31:02,579 es eso 408 00:31:02,579 --> 00:31:05,940 digo 409 00:31:05,940 --> 00:31:08,599 más sonido 410 00:31:08,599 --> 00:31:13,250 vale 411 00:31:13,250 --> 00:31:15,910 podría hacer, cambiar 412 00:31:15,910 --> 00:31:17,269 el comer, pero lo dejo 413 00:31:17,269 --> 00:31:19,390 lo dejo el otro, vale 414 00:31:19,390 --> 00:31:23,430 ok, tenemos más o menos 415 00:31:23,430 --> 00:31:23,950 claro 416 00:31:23,950 --> 00:31:26,930 donde estamos 417 00:31:26,930 --> 00:31:32,299 me hago otro main 418 00:31:32,299 --> 00:31:34,380 si 419 00:31:34,380 --> 00:31:37,319 y atención a esto 420 00:31:37,319 --> 00:31:39,220 porque esto será vuestro futuro 421 00:31:39,220 --> 00:31:41,259 me hago 422 00:31:41,259 --> 00:31:46,440 un array 423 00:31:46,440 --> 00:31:52,720 de seres vivos 424 00:31:52,720 --> 00:31:55,039 que es igual a new 425 00:31:55,039 --> 00:31:56,359 ser vivo 426 00:31:56,359 --> 00:31:58,200 de 427 00:31:58,200 --> 00:32:00,519 Cuatro 428 00:32:00,519 --> 00:32:08,380 Y en seres vivos 429 00:32:08,380 --> 00:32:10,420 De cero 430 00:32:10,420 --> 00:32:30,839 Pongo claramente una planta 431 00:32:30,839 --> 00:32:32,259 Ah, porque tengo que ponerle otra cosa 432 00:32:32,259 --> 00:32:33,880 La altura 433 00:32:33,880 --> 00:32:36,220 El... 434 00:32:36,220 --> 00:32:37,099 ¿Qué más tiene? 435 00:32:40,150 --> 00:32:41,549 Tenía la edad al final 436 00:32:41,549 --> 00:32:42,730 ¿Y aquí qué tenía? 437 00:32:44,730 --> 00:32:45,950 Ah, falso 438 00:32:45,950 --> 00:32:47,769 Sí 439 00:32:47,769 --> 00:32:55,299 En seres vivos de uno 440 00:32:55,299 --> 00:32:58,559 Pongo claramente un animal 441 00:32:58,559 --> 00:33:03,690 Lupus 442 00:33:03,690 --> 00:33:05,970 Familiaris 443 00:33:05,970 --> 00:33:10,180 Y coma 444 00:33:10,180 --> 00:33:11,640 ¿Cómo hace? 445 00:33:12,240 --> 00:33:12,519 Bau 446 00:33:12,519 --> 00:33:15,390 ¿Sí? 447 00:33:16,630 --> 00:33:18,170 ¿Entendéis qué estoy haciendo? 448 00:33:18,430 --> 00:33:20,490 Y no os sorprendéis de esta cosa 449 00:33:20,490 --> 00:33:26,740 ¿Veis una red de seres vivos que dentro no estoy metiendo ni un ser vivo? 450 00:33:26,740 --> 00:33:35,690 seres vivos, hagamos otros dos seres vivos 451 00:33:35,690 --> 00:33:41,420 esto es, no es un pino espinea 452 00:33:41,420 --> 00:33:43,720 sino un árbol 453 00:33:43,720 --> 00:33:46,900 arbóreus 454 00:33:46,900 --> 00:33:51,750 y este de aquí es 455 00:33:51,750 --> 00:33:56,009 ¿cuál es el gato? 456 00:33:57,150 --> 00:33:59,509 feli, félix, fél, fél, algo así 457 00:33:59,509 --> 00:34:01,789 gatos 458 00:34:01,789 --> 00:34:03,789 bonitos 459 00:34:03,789 --> 00:34:08,269 que hace claramente 460 00:34:08,269 --> 00:34:12,550 ahora la cosa interesante de esto 461 00:34:12,550 --> 00:34:14,849 es que yo me he hecho un array 462 00:34:14,849 --> 00:34:16,510 de seres vivos 463 00:34:16,510 --> 00:34:18,989 y todos estos son seres vivos 464 00:34:18,989 --> 00:34:26,500 por lo tanto 465 00:34:26,500 --> 00:34:27,739 pueden estar allí 466 00:34:27,739 --> 00:34:30,139 y si yo ahora hago un 467 00:34:30,139 --> 00:34:31,659 for 468 00:34:31,659 --> 00:34:36,360 ser vivo 469 00:34:36,360 --> 00:34:38,800 x dos punto 470 00:34:38,800 --> 00:34:40,380 seres vivos 471 00:34:40,380 --> 00:34:44,340 y le digo 472 00:34:44,340 --> 00:34:46,739 x punto comer 473 00:34:46,739 --> 00:34:51,900 ¿esto funciona o no? 474 00:35:02,110 --> 00:35:14,940 Fijaos que las plantas comen como plantas y los animales comen como seres vivos. 475 00:35:16,960 --> 00:35:24,119 O sea, que en automático, sin saber si lo que estoy pillando es una planta o un animal, 476 00:35:24,119 --> 00:35:32,940 lo que está haciendo Java es ir a mirar no la referencia que son seres vivos, 477 00:35:32,940 --> 00:35:46,250 Pero mirando la instancia, y en base a la instancia usa el método comer propio de la clase. 478 00:35:46,929 --> 00:35:54,469 Entonces, cuando es una planta, va a usar el método comer de la planta, este método comer. 479 00:35:54,469 --> 00:36:05,309 Sin embargo, cuando es un animal, como en animal no es definido el método comer, lo tirará de ser vivo. 480 00:36:05,309 --> 00:36:46,320 O sea, esto. Comer. Si ahora me voy a animal y sobreescribo comer, diciendo sonido más ñam, ñam, ñam, las plantas comen como plantas y los animales comen como animales. 481 00:36:46,320 --> 00:36:59,599 Vale, ahora quiero que los animales, además de comer, digan algo 482 00:36:59,599 --> 00:37:07,619 Puedo hacer x.sonar 483 00:37:07,619 --> 00:37:12,519 ¿Por qué no? 484 00:37:12,960 --> 00:37:20,110 Porque x es un ser vivo 485 00:37:20,110 --> 00:37:22,389 El ser vivo no tiene sonar 486 00:37:22,389 --> 00:37:26,500 Ningún problema 487 00:37:26,500 --> 00:37:33,429 Animal, píllame x 488 00:37:33,429 --> 00:37:35,690 Trátamelo como un animal 489 00:37:35,690 --> 00:37:37,309 Y hazlo sonar 490 00:37:37,309 --> 00:37:40,659 ¡Perfecto! 491 00:37:42,039 --> 00:37:43,039 Explosion 492 00:37:43,039 --> 00:37:44,880 ¿Por qué? 493 00:37:45,360 --> 00:37:52,750 ¿Por qué explotado? 494 00:37:53,190 --> 00:37:56,650 Porque el primer X 495 00:37:56,650 --> 00:37:59,030 Es una planta 496 00:37:59,030 --> 00:38:02,369 Y cuando yo intento decir a una planta 497 00:38:02,369 --> 00:38:04,449 Trártamela como un animal 498 00:38:04,449 --> 00:38:09,809 Lanza un class cast exception 499 00:38:09,809 --> 00:38:12,369 Error de casting de clase 500 00:38:12,369 --> 00:38:14,190 Tú tienes una planta 501 00:38:14,190 --> 00:38:16,190 y me estás diciendo trátala como un animal 502 00:38:16,190 --> 00:38:17,929 y la planta no es un animal 503 00:38:17,929 --> 00:38:20,329 ¿se entiende? 504 00:38:21,269 --> 00:38:22,269 entonces ¿qué puedo hacer? 505 00:38:23,329 --> 00:38:24,750 para hacer esto 506 00:38:24,750 --> 00:38:26,789 para hacer que los animales también suenen 507 00:38:26,789 --> 00:38:27,989 ¿qué puedo hacer? 508 00:38:28,369 --> 00:38:39,599 no, porque el ser vivo no suena 509 00:38:39,599 --> 00:38:42,539 y si una planta te habla 510 00:38:42,539 --> 00:38:44,099 es un problema 511 00:38:44,099 --> 00:38:49,820 no asumamos 512 00:38:49,820 --> 00:38:51,139 la existencia de ent 513 00:38:51,139 --> 00:38:54,179 entonces 514 00:38:54,179 --> 00:38:57,440 más claro, si 515 00:38:57,440 --> 00:38:59,079 x 516 00:38:59,079 --> 00:39:08,260 Entonces, sí, puedes hacer este casting. 517 00:39:14,469 --> 00:39:18,070 O sea, si yo quiero hacer un casting de este ser vivo a un animal, 518 00:39:18,590 --> 00:39:21,869 antes me cercioro que es un animal. 519 00:39:21,869 --> 00:39:29,090 Si este ser vivo es instancia de animal, 520 00:39:29,969 --> 00:39:33,110 cuando será una planta, esto será falso. 521 00:39:33,750 --> 00:39:35,250 Y por lo tanto, no hace esto. 522 00:39:35,250 --> 00:39:39,550 cuando será animal, esto será true 523 00:39:39,550 --> 00:39:43,329 y por lo tanto puede hacer un casting a animal 524 00:39:43,329 --> 00:39:46,489 y hacerlo sonar, y entonces ya 525 00:39:46,489 --> 00:39:53,329 no explota, y las plantas comen y nada más 526 00:39:53,329 --> 00:39:57,210 mientras los animales comen y luego suenan 527 00:39:57,210 --> 00:40:01,190 las plantas comen nada más, el animal 528 00:40:01,190 --> 00:40:10,639 come y suena, pues esto 529 00:40:10,639 --> 00:40:12,719 es lo que vamos a hacer 530 00:40:12,719 --> 00:40:14,400 de aquí a breve 531 00:40:14,400 --> 00:40:16,280 crear 532 00:40:16,280 --> 00:40:18,360 arrays 533 00:40:18,360 --> 00:40:19,719 de cosas 534 00:40:19,719 --> 00:40:23,000 más genéricas 535 00:40:23,000 --> 00:40:24,260 un array de personas 536 00:40:24,260 --> 00:40:26,619 y dentro del array personas poner 537 00:40:26,619 --> 00:40:28,019 profesores y alumnos 538 00:40:28,019 --> 00:40:30,659 y luego hacer programas que me van buscando 539 00:40:30,659 --> 00:40:32,340 en las personas, solo los alumnos 540 00:40:32,340 --> 00:40:34,579 solo los profesores, o si tengo que hacer 541 00:40:34,579 --> 00:40:36,699 una cosa sobre todas las personas, me la pueden hacer 542 00:40:36,699 --> 00:40:37,659 sobre todas las personas 543 00:40:37,659 --> 00:40:40,340 tener un array 544 00:40:40,340 --> 00:40:42,579 que si usa un método 545 00:40:42,579 --> 00:40:44,780 que ha sido sobrescrito, solo lo llamo 546 00:40:44,780 --> 00:40:46,719 y será Java que elige 547 00:40:46,719 --> 00:40:49,039 cuál es la implementación 548 00:40:49,039 --> 00:40:50,260 correcta 549 00:40:50,260 --> 00:40:52,099 del método que va a utilizar 550 00:40:52,099 --> 00:40:54,039 y si en vez 551 00:40:54,039 --> 00:40:56,420 hay métodos que son 552 00:40:56,420 --> 00:40:58,280 solo propios de una clase 553 00:40:58,280 --> 00:41:00,579 pues comprobar que es 554 00:41:00,579 --> 00:41:02,460 de esa clase o no 555 00:41:02,460 --> 00:41:04,820 y si es de esta clase poder utilizarla 556 00:41:04,820 --> 00:41:05,800 si no es de esta clase, no. 557 00:41:05,800 --> 00:41:10,309 ¿Dudas?