1 00:00:00,180 --> 00:00:04,160 Entonces, vamos a hacer un ejemplo de clases abstractas. 2 00:00:04,559 --> 00:00:11,400 Estos son instrumentos con cuerda. 3 00:00:14,900 --> 00:00:19,280 Esta clase representa instrumentos con cuerda. 4 00:00:19,399 --> 00:00:24,660 En realidad, acordaos que cuando hacéis este tipo de clase, porque luego es un, es un, 5 00:00:24,660 --> 00:00:27,600 Entonces sale raro de esto 6 00:00:27,600 --> 00:00:30,280 Es un instrumento con cuerda 7 00:00:30,280 --> 00:00:31,620 ¿Vale? Entonces ponerlo al 8 00:00:31,620 --> 00:00:33,600 Singulario creo que es mejor 9 00:00:33,600 --> 00:00:35,659 Refactor 10 00:00:35,659 --> 00:00:36,659 Rename 11 00:00:36,659 --> 00:00:39,659 Lo cambias, instrumento con cuerda 12 00:00:39,659 --> 00:00:40,439 Ya está 13 00:00:40,439 --> 00:00:42,039 Entonces 14 00:00:42,039 --> 00:00:45,159 ¿Qué tiene un instrumento con cuerda? 15 00:00:45,500 --> 00:00:46,460 Pues seguramente 16 00:00:46,460 --> 00:00:49,159 Unas cuerdas 17 00:00:49,159 --> 00:00:53,520 Aquí estamos todos de acuerdo 18 00:00:53,520 --> 00:00:54,340 ¿Vale? 19 00:00:54,340 --> 00:00:58,000 tendrá un constructor 20 00:00:58,000 --> 00:01:00,799 public void 21 00:01:00,799 --> 00:01:04,099 instrumento 22 00:01:04,099 --> 00:01:05,680 con cuerda 23 00:01:05,680 --> 00:01:07,939 int n 24 00:01:07,939 --> 00:01:11,719 dis.num 25 00:01:11,719 --> 00:01:13,659 cuerdas es igual a n 26 00:01:13,659 --> 00:01:14,840 si 27 00:01:14,840 --> 00:01:17,099 y por ejemplo 28 00:01:17,099 --> 00:01:19,420 cualquier instrumento con cuerda puede 29 00:01:19,420 --> 00:01:21,079 describirse 30 00:01:21,079 --> 00:01:21,900 por ejemplo 31 00:01:21,900 --> 00:01:24,439 public void 32 00:01:24,439 --> 00:01:26,439 Descríbete 33 00:01:26,439 --> 00:01:30,430 Y dirá 34 00:01:30,430 --> 00:01:31,750 Sí, soy 35 00:01:31,750 --> 00:01:33,430 Soy 36 00:01:33,430 --> 00:01:35,250 Soy 37 00:01:35,250 --> 00:01:39,170 Soy un instrumento con 38 00:01:39,170 --> 00:01:40,569 Más 39 00:01:40,569 --> 00:01:42,370 N cuerdas 40 00:01:42,370 --> 00:01:43,390 Más 41 00:01:43,390 --> 00:01:45,469 Cuerdas 42 00:01:45,469 --> 00:01:52,760 ¿Qué he hecho? 43 00:01:53,760 --> 00:01:53,959 Nun 44 00:01:53,959 --> 00:01:54,879 Nun 45 00:01:54,879 --> 00:01:57,079 Ay 46 00:01:57,079 --> 00:01:59,200 ¿Dudas? 47 00:02:00,200 --> 00:02:01,819 N es parámetro formal 48 00:02:01,819 --> 00:02:04,280 Mi número se llama dis.numcuerdas 49 00:02:04,280 --> 00:02:04,560 ¿Vale? 50 00:02:05,140 --> 00:02:08,159 Hasta ahora esta aquí es una clase normal y corriente 51 00:02:08,159 --> 00:02:10,479 Es una clase como la que hemos construido hasta ahora 52 00:02:10,479 --> 00:02:10,900 ¿Vale? 53 00:02:11,319 --> 00:02:12,520 ¿Qué pasa, pero? 54 00:02:12,919 --> 00:02:16,319 Que ahora yo quiero que un instrumento con cuerda 55 00:02:16,319 --> 00:02:18,759 Seguramente todos los instrumentos con cuerda 56 00:02:18,759 --> 00:02:21,259 Lo que pueden hacer es afinarse 57 00:02:21,259 --> 00:02:22,960 Yo puedo afinar 58 00:02:22,960 --> 00:02:25,560 Pero vosotros que sois expertos musicales 59 00:02:25,560 --> 00:02:28,759 Sabéis que cada instrumento con cuerda se afina de una forma distinta 60 00:02:28,759 --> 00:02:29,699 ¿Vale? 61 00:02:29,699 --> 00:02:54,780 Entonces, si yo hago public void afinar, yo no sé qué poner aquí, porque una guitarra se afinaría con milaresolcimi, pero un ukulele no, un ukulele se afina de otra forma, 62 00:02:54,780 --> 00:03:04,509 Se afina sol, do, mi, la 63 00:03:04,509 --> 00:03:06,909 Por lo tanto son distintos 64 00:03:06,909 --> 00:03:08,930 Por lo tanto, ¿qué voy a poner aquí? 65 00:03:10,490 --> 00:03:16,750 No tengo una definición de este método para afinar el instrumento con cuerda 66 00:03:16,750 --> 00:03:19,870 Porque dependiendo del instrumento con cuerda que estoy haciendo 67 00:03:19,870 --> 00:03:22,949 Pues tendré que hacer cosas distintas, afinarlo de otra forma 68 00:03:22,949 --> 00:03:26,289 De hecho, una guitarra tiene seis cordas, un bajo tiene cuatro 69 00:03:26,289 --> 00:03:29,949 Entonces, ¿cómo hago? Afinar todos a la misma forma 70 00:03:29,949 --> 00:03:33,969 Si uno tengo que afinar seis cuerdas y uno tengo que afinar solo cuatro 71 00:03:33,969 --> 00:03:38,110 O sea, que no tengo una definición que me valga para todos los instrumentos de cuerda 72 00:03:38,110 --> 00:03:40,810 Ahora, todos los instrumentos se pueden describir con 73 00:03:40,810 --> 00:03:42,610 Soy un instrumento con este número de cuerdas 74 00:03:42,610 --> 00:03:46,250 Pues esto lo he hecho aquí, esto es un método concreto 75 00:03:46,250 --> 00:03:48,669 Pero este método de aquí me da problemas 76 00:03:48,669 --> 00:03:49,949 ¿Vale? 77 00:03:50,550 --> 00:03:53,789 Otro método que me puede dar problemas 78 00:03:53,789 --> 00:03:58,169 es public void sonar 79 00:03:58,169 --> 00:04:02,460 porque claro, una guitarra hará 80 00:04:02,460 --> 00:04:06,840 pero un ukulele hará como 81 00:04:06,840 --> 00:04:10,599 y un bajo hará 82 00:04:10,599 --> 00:04:16,060 entonces no puedo yo poner aquí sonar y que todos sonen iguales 83 00:04:16,060 --> 00:04:19,939 cada uno tendrá su propia forma de sonar 84 00:04:19,939 --> 00:04:41,949 entonces ¿qué hago? le digo que estos métodos 85 00:04:41,949 --> 00:05:02,790 No los voy a implementar yo. Fijaos, algunos sí los he implementado. Hasta tengo un constructor. Pero le voy a decir, oye, mira, estos métodos de aquí tienen que estar porque cualquier instrumento con cuerda se podrá afinar y cualquier instrumento con cuerda se podrá sonar, pero no sé cómo. 86 00:05:02,790 --> 00:05:05,310 ¿Sí? Ahora esto se enfada 87 00:05:05,310 --> 00:05:07,990 Porque me dice, el método abstracto 88 00:05:07,990 --> 00:05:09,870 Puede solo ser definido 89 00:05:09,870 --> 00:05:11,470 En una clase abstracta 90 00:05:11,470 --> 00:05:13,449 Porque la clase 91 00:05:13,449 --> 00:05:16,189 Aquí será parecido 92 00:05:16,189 --> 00:05:17,189 Te dirá 93 00:05:17,189 --> 00:05:19,730 El tipo de instrumento concorda 94 00:05:19,730 --> 00:05:21,610 Tiene que ser abstracto 95 00:05:21,610 --> 00:05:23,610 Una clase abstracta, para definir 96 00:05:23,610 --> 00:05:24,709 Métodos abstractos 97 00:05:24,709 --> 00:05:26,550 Entonces ningún problema 98 00:05:26,550 --> 00:05:28,329 Abstract 99 00:05:28,329 --> 00:05:32,110 Ya está, ahora esta es una clase abstracta 100 00:05:32,110 --> 00:05:39,370 Ser una clase abstracta no quiere decir que todo tiene que ser abstracto, quiere decir que algunas cosas aquí son abstractas y algunas cosas no. 101 00:05:39,990 --> 00:05:49,750 Estos que podía hacer, esta es la parte digamos concreta, estos lo comparten todos, hemos decidido, obviamente una guitarra no es igual a un bajo, 102 00:05:50,269 --> 00:05:55,310 pero para cuando se describe, dice solo el número de las cuerdas, pues perfecto, aquí lo tengo. 103 00:05:55,569 --> 00:06:01,509 Todos los instrumentos, este método aquí está implementado, pero estos métodos de aquí no. 104 00:06:01,509 --> 00:06:19,389 Me está solo diciendo, oye, mira, estos tienen que estar. Cuando tú hagas una clase concreta que herede de esta clase abstracta, estos dos métodos los deberás hacer. Este es un contrato. La interfaz, veremos que es todavía más esto. 105 00:06:19,389 --> 00:06:30,149 Es un contrato que hacemos entre quien ha hecho esta clase aquí y quien la va a heredar. Una parte yo te la doy hecha y esta parte la parte común con todos los instrumentos de cuerda. 106 00:06:30,290 --> 00:06:42,350 Si tú quieres ser un instrumento de cuerda, puedes extenderme, pero a cambio, el contrato que hacemos, te pillas toda esta parte de aquí, ya hecha, que podría ser más interesante que lo que hemos hecho nosotros, 107 00:06:42,350 --> 00:06:47,769 Pero a cambio me tienes que implementar tú estos dos métodos 108 00:06:47,769 --> 00:06:51,230 Según el tipo de instrumento que eres tú 109 00:06:51,230 --> 00:06:54,019 ¿Entiendes? Hasta aquí 110 00:06:54,019 --> 00:06:58,899 Vamos a crear la clase main 111 00:06:58,899 --> 00:07:03,329 Clase main 112 00:07:03,329 --> 00:07:17,620 Si yo aquí intento hacer un instrumento con cuerda ICC 113 00:07:17,620 --> 00:07:19,160 Es igual a new 114 00:07:19,160 --> 00:07:22,360 Instrumento 115 00:07:22,360 --> 00:07:23,800 Con cuerda 116 00:07:23,800 --> 00:07:24,779 De 4 117 00:07:24,779 --> 00:07:28,480 Se enfada 118 00:07:28,480 --> 00:07:30,480 ¿Por qué se enfada? 119 00:07:30,920 --> 00:07:33,819 Si voy a mirar, ¿por qué me dice instrumento con cuerda? 120 00:07:34,639 --> 00:07:35,399 Porque lo he escrito mal 121 00:07:35,399 --> 00:07:44,079 Ya 122 00:07:44,079 --> 00:07:47,680 Porque he escrito instrumento al otro lado 123 00:07:47,680 --> 00:07:48,199 Vale 124 00:07:48,199 --> 00:07:50,740 Entonces estaba mal al otro lado 125 00:07:50,740 --> 00:07:52,000 Instrumento 126 00:07:52,000 --> 00:07:54,480 Y aquí 127 00:07:54,480 --> 00:07:59,470 Cuidado, no le pongáis la R aquí 128 00:07:59,470 --> 00:08:02,009 Porque si no se queda en un fichero Java 129 00:08:02,009 --> 00:08:02,930 Que no es correcto 130 00:08:02,930 --> 00:08:06,449 Siempre que cambiáis este tipo de declaraciones 131 00:08:06,449 --> 00:08:07,649 Hacedlo con un refactor 132 00:08:07,649 --> 00:08:09,269 Refactor, rename 133 00:08:09,269 --> 00:08:12,769 Y aquí le ponéis instrumento 134 00:08:12,769 --> 00:08:13,250 Con cuerda 135 00:08:13,250 --> 00:08:15,870 Entonces os lo cambia 136 00:08:15,870 --> 00:08:17,029 También aquí 137 00:08:17,029 --> 00:08:18,490 En el constructor 138 00:08:18,490 --> 00:08:20,730 Y os lo cambia también aquí 139 00:08:20,730 --> 00:08:22,569 En el Java 140 00:08:22,569 --> 00:08:24,769 Ahora que lo tengo 141 00:08:24,769 --> 00:08:27,230 Ahora se sigue enfadando otra vez 142 00:08:27,230 --> 00:08:29,110 Fijaos que aquí no se enfada 143 00:08:29,110 --> 00:08:48,789 Esto es legítimo. Pero aquí se enfada porque me dice cannot instantiate the type instrumento con cuerda. No puedo instanciar un elemento de este tipo. ¿Por qué? Porque es abstracto y los elementos, las clases abstractas no se pueden instanciar. 144 00:08:48,789 --> 00:08:56,789 Porque si yo creara un objeto como esto, entonces yo podría llamar luego el afinar o el sonar, pero no están definidos. 145 00:08:58,090 --> 00:09:00,470 Y por lo tanto, ¿qué debería hacer él? Pobrecito. 146 00:09:01,730 --> 00:09:03,629 Ten en cuenta que yo podría hacer esto. 147 00:09:13,110 --> 00:09:14,350 Esto no lo sé qué es. 148 00:09:14,929 --> 00:09:16,029 Luego lo debería instanciar. 149 00:09:16,149 --> 00:09:20,289 Si ahora uso... ¿Qué me pasaría si ahora llamo algo sobre ICC? 150 00:09:25,210 --> 00:09:25,389 No. 151 00:09:26,669 --> 00:09:27,409 Ahora lo vemos. 152 00:09:27,409 --> 00:09:33,389 fijaos que cuando hago y cc punto me sale aquí los métodos que he definido en 153 00:09:33,389 --> 00:09:37,649 instrumento con cuerda porque esto es un instrumento con cuerda 154 00:09:37,649 --> 00:09:44,570 al final descríbete dónde está esto sonar junto con los de objetos ahora si 155 00:09:44,570 --> 00:09:52,950 yo le dijera descríbete que fijaos es un método que está implementado 156 00:09:52,950 --> 00:09:54,970 Se me enfada. ¿Por qué se me enfada? 157 00:09:58,899 --> 00:10:00,100 The local variable 158 00:10:00,100 --> 00:10:02,220 ICC may not have been 159 00:10:02,220 --> 00:10:03,860 initialized. 160 00:10:04,620 --> 00:10:06,379 Podría no ser inicializada. 161 00:10:07,519 --> 00:10:08,460 En particular, 162 00:10:08,659 --> 00:10:10,720 si este problema no lo diera, 163 00:10:11,159 --> 00:10:12,259 esto sería un null. 164 00:10:17,419 --> 00:10:18,379 ¿Y esto qué problema da? 165 00:10:25,870 --> 00:10:26,690 ¿Dónde están errores? 166 00:10:28,799 --> 00:10:31,000 Mi viejo amigo, el null pointer exception. 167 00:10:31,799 --> 00:10:33,059 Estás intentando hacer 168 00:10:33,059 --> 00:10:33,620 algo 169 00:10:33,620 --> 00:10:36,100 sobre algo que es null. 170 00:10:37,019 --> 00:10:37,559 Entonces, 171 00:10:38,820 --> 00:10:44,340 aquí tengo una variable que en vez de apuntar a un objeto apunta a null, 172 00:10:44,600 --> 00:10:46,360 cuando tú dices algo sobre este objeto, 173 00:10:46,500 --> 00:10:51,889 él no sabe a qué objeto te hace referencia y por lo tanto explota, ¿sí? 174 00:10:53,129 --> 00:10:55,570 Entonces, así no lo puede usar, ¿sí? 175 00:10:55,750 --> 00:10:58,549 Y hemos dicho que no puede hacer un new instrumento con cuerda 176 00:10:58,549 --> 00:11:03,509 porque es abstracta, o sea que no lo puede usar, ¿sí? 177 00:11:03,950 --> 00:11:16,070 Esperad que aquí, ok, vuelvo a lo mío. 178 00:11:16,070 --> 00:11:20,649 Entonces, para poder utilizar instrumentos con cuerda 179 00:11:20,649 --> 00:11:24,330 Necesito crear un instrumento con cuerda 180 00:11:24,330 --> 00:11:25,549 ¿Cómo lo hago? 181 00:11:25,970 --> 00:11:31,860 Voy aquí y me creo guitarra 182 00:11:31,860 --> 00:11:35,240 Ya está, ahora tengo una guitarra 183 00:11:35,240 --> 00:11:36,860 Y a esta guitarra le digo 184 00:11:36,860 --> 00:11:41,639 Oye, mira, ¿tú extendes qué? 185 00:11:41,639 --> 00:11:45,610 Efectivamente 186 00:11:45,610 --> 00:11:48,490 Instrumento 187 00:11:48,490 --> 00:11:51,529 Con cuerda 188 00:11:51,529 --> 00:11:53,149 ¿Vale? 189 00:11:53,409 --> 00:11:55,269 Y fijaos que en el momento que le digo esto 190 00:11:55,269 --> 00:11:55,990 Se enfada 191 00:11:55,990 --> 00:11:57,049 ¿Por qué se enfadará? 192 00:12:00,480 --> 00:12:00,720 ¿Por qué? 193 00:12:12,409 --> 00:12:13,129 Diga, type 194 00:12:13,129 --> 00:12:17,169 Quitar must implement the inherited abstract method 195 00:12:17,169 --> 00:12:18,909 Instrumento con cuerda punto afinar 196 00:12:18,909 --> 00:12:30,899 Se enfada porque me está diciendo 197 00:12:30,899 --> 00:12:33,080 Tú dices que extendes esta clase 198 00:12:33,080 --> 00:12:34,879 Esta clase abstracta 199 00:12:34,879 --> 00:12:41,259 Y si tú extendes esta clase abstracta, tienes que implementar todos los métodos abstractos de esa clase. 200 00:12:47,379 --> 00:12:59,419 En particular, me está diciendo, el tipo guitarra, o sea, esta clase, tiene que implementar el método abstracto heredado, afinar. 201 00:13:00,340 --> 00:13:02,440 Que es uno de los dos que tengo que rellenar. 202 00:13:03,000 --> 00:13:08,659 Entonces, yo le puedo decir aquí, ah, sí, pero aquí me da dos opciones para solucionar esto. 203 00:13:09,200 --> 00:13:18,139 o añade los métodos que no has implementado, o haz abstracto también, guitarra. 204 00:13:18,860 --> 00:13:28,320 Si guitarra es abstracto no tengo problemas, puedo hereditar objetos abstractos, añadir, o sea, perdón, métodos abstractos, añadir otros métodos abstractos, 205 00:13:28,320 --> 00:13:35,080 pero no puedo hacer una guitarra, ¿sí? Sin embargo, yo lo que quiero es esto. 206 00:13:35,080 --> 00:13:58,039 Entonces, él me dice afinar y sonar, que son los dos métodos sobrescribiendo, los métodos que eran arriba abstractos, y entonces ahora mi guitarra está bien, porque mi guitarra es una implementación concreta de un instrumento con cuerda, 207 00:13:58,039 --> 00:14:04,279 Y entonces, lo que había dejado allí de no sé qué hacer, pues ahora lo voy a hacer aquí, con sonar y afinar. 208 00:14:04,960 --> 00:14:05,960 Además de todo el resto. 209 00:14:09,039 --> 00:14:11,259 Entonces, ¿qué tiene una guitarra? 210 00:14:12,279 --> 00:14:24,409 Pues, tiene un string, esto no sería string, sería notas, pero bueno, un array de string, cuerdas. 211 00:14:24,730 --> 00:14:26,919 ¿Sí? 212 00:14:26,919 --> 00:14:40,970 Entonces, cuando yo creo una guitarra, public guitarra, le tendré que pasar cuántas cuerdas tienes a guitarras de más cuerdas. 213 00:14:41,409 --> 00:14:46,809 Pero bueno, asumamos nosotros guitarras estándar, no le paso nada de nada, ¿vale? 214 00:14:47,129 --> 00:14:56,009 Y lo que me hace él es crearme un súper, entonces, instrumento con cuerda de seis cuerdas. 215 00:14:56,009 --> 00:14:58,629 Ahora sé que tiene 6 cuerdas 216 00:14:58,629 --> 00:15:00,450 Se enfada 217 00:15:00,450 --> 00:15:02,909 No había puesto aquí 218 00:15:02,909 --> 00:15:06,529 A ver por qué se enfada 219 00:15:06,529 --> 00:15:11,490 El constructor de instrumentos con cuerda int 220 00:15:11,490 --> 00:15:12,529 Is undefined 221 00:15:12,529 --> 00:15:32,340 No sé yo si está tan undefined 222 00:15:32,340 --> 00:15:55,440 Ah, porque 223 00:15:55,440 --> 00:15:57,440 No había hecho un constructor 224 00:15:57,440 --> 00:15:58,419 Había puesto este void 225 00:15:58,419 --> 00:16:00,759 Como había puesto este void 226 00:16:00,759 --> 00:16:02,419 Esto no es un constructor, es un método 227 00:16:02,419 --> 00:16:04,399 ¿Vale? Me he equivocado yo cuando 228 00:16:04,399 --> 00:16:06,639 Cuando lo he declarado, entonces él me está diciendo 229 00:16:06,639 --> 00:16:08,440 No existe el constructor 230 00:16:08,440 --> 00:16:11,139 Este es el constructor que quiero 231 00:16:11,139 --> 00:16:14,399 ¿Sí? ¿Se ha entendido? 232 00:16:17,940 --> 00:16:18,980 El void que estaba aquí 233 00:16:18,980 --> 00:16:21,259 Vale, entonces 234 00:16:21,259 --> 00:16:23,279 Ahora sí, ahora me funciona 235 00:16:23,279 --> 00:16:24,940 Perfecto, entonces 236 00:16:24,940 --> 00:16:27,220 Creo un instrumento con cuerda con 6 cuerdas 237 00:16:27,220 --> 00:16:29,320 Por lo tanto, en la parte de instrumento con cuerda 238 00:16:29,320 --> 00:16:30,980 El número de cuerda me pondrá 6 239 00:16:30,980 --> 00:16:33,080 ¿Vale? Y luego 240 00:16:33,080 --> 00:16:34,919 haré un 241 00:16:34,919 --> 00:16:36,940 cuerdas 242 00:16:36,940 --> 00:16:39,940 es igual 243 00:16:39,940 --> 00:16:40,879 a new 244 00:16:40,879 --> 00:16:42,679 string 245 00:16:42,679 --> 00:16:47,179 de 6 sería 246 00:16:47,179 --> 00:16:49,360 pero 10.cuerdas 247 00:16:49,360 --> 00:16:54,019 se enfada 248 00:16:54,019 --> 00:16:59,059 ah no, porque 10.num 249 00:16:59,059 --> 00:17:00,299 cuerdas, es este 250 00:17:00,299 --> 00:17:01,620 yo quiero este valor 251 00:17:01,620 --> 00:17:05,019 para que me crea un array 252 00:17:05,019 --> 00:17:06,099 de tantos 253 00:17:06,099 --> 00:17:09,160 espacios, cuantas cuerdas 254 00:17:09,160 --> 00:17:17,500 tengo ¿vale? ¿por qué? ahora lo vemos ¿vale? entonces mi cuerda tiene un array con sus 255 00:17:17,500 --> 00:17:23,339 cuerdas que es lo que tiene más, en realidad como todos lo tienen lo hubiera podido poner 256 00:17:23,339 --> 00:17:30,579 arriba y no implementarlo pero bueno lo quería hacer así ¿vale? ahora afinar ¿qué hago 257 00:17:30,579 --> 00:17:37,500 cuando afino? ¿vale? lo que quiero afinar es que en mis cuerdas toquen exactamente lo 258 00:17:37,500 --> 00:18:12,259 que tiene que tocar vale entonces en cuerdas de 0 pondré mi, la, re, sol, si, mi, mi alto 259 00:18:15,140 --> 00:18:20,779 entonces esto es cuando ya afino y luego a lo mejor lo imprimo en pantalla para que haga algo 260 00:18:20,779 --> 00:18:22,359 si no, no se ve nada, si eso 261 00:18:22,359 --> 00:18:28,140 afina 262 00:18:28,140 --> 00:18:32,289 más 263 00:18:32,289 --> 00:18:35,329 a raíz punto to string 264 00:18:35,329 --> 00:18:36,630 de 265 00:18:36,630 --> 00:18:38,329 cuerdas 266 00:18:38,329 --> 00:18:44,019 entonces cuando yo afino 267 00:18:44,019 --> 00:18:46,220 pondré las cuerdas 268 00:18:46,220 --> 00:18:48,019 todas al valor correcto 269 00:18:48,019 --> 00:18:50,200 y luego le pondré 270 00:18:50,200 --> 00:18:50,779 que afina 271 00:18:50,779 --> 00:18:53,339 cuando sueno 272 00:18:53,339 --> 00:18:54,700 pues hará algo 273 00:18:54,700 --> 00:18:56,819 La guitarra suena y dice algo 274 00:18:56,819 --> 00:18:58,440 Podría pillar al azar 275 00:18:58,440 --> 00:19:00,619 Estas posiciones aquí para hacer 276 00:19:00,619 --> 00:19:02,359 Sonas distintas, pero nosotros hacemos que 277 00:19:02,359 --> 00:19:05,140 Cuando suena la guitarra, ¿cómo hace la guitarra? 278 00:19:06,579 --> 00:19:06,940 Brang 279 00:19:06,940 --> 00:19:08,119 Brang 280 00:19:08,119 --> 00:19:10,079 Brang 281 00:19:10,079 --> 00:19:15,000 ¿Sí? 282 00:19:16,519 --> 00:19:17,359 O vravrang 283 00:19:17,359 --> 00:19:21,660 Sí 284 00:19:21,660 --> 00:19:24,599 Entonces, he hecho mi guitarra 285 00:19:24,599 --> 00:19:26,799 Ahora voy al mundo del main 286 00:19:26,799 --> 00:19:29,240 hemos dicho que esto no lo puede hacer 287 00:19:29,240 --> 00:19:30,920 como un instrumento de concuerda 288 00:19:30,920 --> 00:19:33,420 pero lo que puede hacer ahora es un 289 00:19:33,420 --> 00:19:33,839 new 290 00:19:33,839 --> 00:19:36,400 guitarra 291 00:19:36,400 --> 00:19:40,799 entonces ahora 292 00:19:40,799 --> 00:19:42,599 no hay problemas 293 00:19:42,599 --> 00:19:43,900 y si yo lanzo 294 00:19:43,900 --> 00:19:47,500 la guitarra se describirá como soy un instrumento 295 00:19:47,500 --> 00:19:47,980 de secundaria 296 00:19:47,980 --> 00:19:51,859 si yo le digo 297 00:19:51,859 --> 00:19:53,200 esto lo llamamos 298 00:19:53,200 --> 00:19:55,500 guitarra 299 00:19:58,039 --> 00:19:59,460 si yo le digo a guitarra 300 00:19:59,460 --> 00:20:03,160 .afinar 301 00:20:03,160 --> 00:20:05,359 Se afinará 302 00:20:05,359 --> 00:20:07,059 Y si yo digo guitar 303 00:20:07,059 --> 00:20:08,180 Dot 304 00:20:08,180 --> 00:20:10,460 ¿Qué es esto? 305 00:20:11,200 --> 00:20:11,740 Sonar 306 00:20:11,740 --> 00:20:14,319 Sonará la guitarra 307 00:20:14,319 --> 00:20:16,880 Fijaos que guitar es un instrumento con cuerda 308 00:20:16,880 --> 00:20:21,480 Pero usa 309 00:20:21,480 --> 00:20:27,309 Los métodos de guitarra 310 00:20:27,309 --> 00:20:27,690 ¿Sí? 311 00:20:28,690 --> 00:20:29,069 Vale 312 00:20:29,069 --> 00:20:31,710 Vamos a seguir con nuestro ejercicio 313 00:20:31,710 --> 00:20:40,460 Creo un instrumento con cuatro cuerdas 314 00:20:40,460 --> 00:20:42,740 ¿Vale? 315 00:20:44,980 --> 00:20:47,099 Este es un instrumento con cuatro cuerdas 316 00:20:47,099 --> 00:20:49,140 Ukelele 317 00:20:49,140 --> 00:20:50,400 El ukelele 318 00:20:50,400 --> 00:20:51,099 Ukelele 319 00:20:51,099 --> 00:20:52,400 El bajo 320 00:20:52,400 --> 00:20:53,799 ¿Qué sigo? 321 00:20:54,539 --> 00:20:54,859 ¿Cielo? 322 00:20:54,980 --> 00:20:55,779 ¿También? 323 00:20:55,960 --> 00:20:56,279 ¿Por qué no? 324 00:20:56,619 --> 00:20:57,119 ¿Violín? 325 00:20:57,559 --> 00:20:57,980 ¿Por qué no? 326 00:20:58,420 --> 00:20:58,539 ¿Sí? 327 00:20:59,119 --> 00:21:02,019 Por lo tanto, esto es un instrumento con cuatro cuerdas 328 00:21:02,019 --> 00:21:03,319 ¿Qué tiene particularidad? 329 00:21:03,319 --> 00:21:23,759 Que si yo hago public instrumento con cuatro cuerdas, esto extenderá instrumento con cuerda, ¿no? 330 00:21:28,480 --> 00:21:38,769 Y que si yo hago un constructor, pues la única cosa que tendrá que hacer es, exacto, super de cuatro. 331 00:21:43,210 --> 00:21:49,470 Porque un instrumento con cuerdas no sé cuántas tiene, pero un instrumento con cuatro cuerdas asumo que tenga cuatro cuerdas, si no me he equivocado de algo. 332 00:21:50,470 --> 00:22:21,730 Ahora, ¿pero por qué se enfada? Faltaría implementar los métodos abstractos. ¿Y cómo se afina un instrumento de cuatro cuerdas? O sea que esto también es, y entonces no se enfada. 333 00:22:21,730 --> 00:22:34,710 Porque todos los métodos que he heredado desde aquí arriba, estos dos, siguen siendo abstractos. 334 00:22:34,869 --> 00:22:39,470 Pero como esta de aquí es abstracta también, siguen siendo abstractos. 335 00:22:39,630 --> 00:22:44,650 No puedo crear un new instrumento con cuatro cuerdas, porque es abstracto. 336 00:22:46,009 --> 00:22:49,910 Entonces, puedo implementar esto. 337 00:22:50,089 --> 00:22:51,450 Los puedo implementar estos. 338 00:22:51,450 --> 00:22:59,690 si quiero aquí. O puedo no implementarlos y dejarlo a la siguiente nivel de la jerarquía. 339 00:23:00,049 --> 00:23:02,990 Como queramos, como necesitamos. ¿Se entiende? 340 00:23:04,670 --> 00:23:12,190 Ahora, todos los instrumentos con cuatro cuerdas tienen un int nivel de fastidio. 341 00:23:12,970 --> 00:23:20,160 Fastidio existe. Por ejemplo, el violín tiene un nivel de fastidio altísimo, 342 00:23:20,160 --> 00:23:22,160 Porque si no lo sabes tocar 343 00:23:22,160 --> 00:23:24,319 Es horrible 344 00:23:24,319 --> 00:23:25,180 ¿Vale? 345 00:23:25,400 --> 00:23:27,619 El ukulele tiene un nivel fastidio muy bajo 346 00:23:27,619 --> 00:23:28,859 ¿Sí? 347 00:23:29,160 --> 00:23:30,920 Entonces aquí se lo ponemos 348 00:23:30,920 --> 00:23:33,940 Int nivel de fastidio 349 00:23:33,940 --> 00:23:37,170 ¿Sí? 350 00:23:37,630 --> 00:23:40,490 Que aquí setaremos a cero por defecto 351 00:23:41,230 --> 00:23:42,609 Nivel 352 00:23:42,609 --> 00:23:44,069 Dis 353 00:23:44,069 --> 00:23:46,589 Nivel de fastidio 354 00:23:46,589 --> 00:23:47,910 Es igual a nivel de 355 00:23:47,910 --> 00:23:53,220 Y si pensáis que no 356 00:23:53,220 --> 00:23:55,579 Os invito, un día que tenéis hambre 357 00:23:55,579 --> 00:23:58,440 A ir a escuchar a alguien que no sabe tocar violín 358 00:23:58,440 --> 00:23:59,720 Es como 359 00:23:59,720 --> 00:24:02,599 Una cosa en el estómago 360 00:24:02,599 --> 00:24:03,799 Que no podéis entender 361 00:24:03,799 --> 00:24:04,880 ¿Vale? 362 00:24:06,539 --> 00:24:07,500 ¿Dudas? Vale 363 00:24:07,500 --> 00:24:10,359 Podríamos aquí, repito 364 00:24:10,359 --> 00:24:11,839 Por ejemplo 365 00:24:11,839 --> 00:24:16,240 Yo podría aquí implementar 366 00:24:16,240 --> 00:24:18,559 Uno o los dos métodos 367 00:24:18,559 --> 00:24:20,160 Que he puesto aquí 368 00:24:20,160 --> 00:24:21,740 Como abstractos, ¿vale? 369 00:24:21,740 --> 00:24:28,000 Entonces, es como si completara una parte de lo que tengo que completar, pero no el resto. 370 00:24:28,099 --> 00:24:32,980 Como nosotros consideramos también violín y cosas por el estilo, a lo mejor no podemos hacer mucho aquí. 371 00:24:33,339 --> 00:24:38,900 Pero imaginamos que todos los instrumentos de cuatro cuerdas hacen el mismo ñi ñi ñi, por ejemplo. 372 00:24:38,900 --> 00:24:53,339 Pues entonces yo podría hacer aquí que public void sonar es siso ñi ñi ñi 373 00:24:53,339 --> 00:24:57,619 Esto quiere decir que estoy implementando una parte 374 00:24:57,619 --> 00:25:04,900 O sea que esto que era extracto, ahora todos los que heredarán de los instrumentos con cuatro cuerdas 375 00:25:04,900 --> 00:25:07,000 Todos harán ñi ñi ñi 376 00:25:07,000 --> 00:25:11,400 Lo he extrapolado, lo he implementado. 377 00:25:12,180 --> 00:25:13,960 Se quedará que la afinación no. 378 00:25:14,299 --> 00:25:17,920 La afinación es propia de cada uno de los instrumentos distintos que hay. 379 00:25:19,660 --> 00:25:21,500 ¿Se entiende más o menos por dónde voy? 380 00:25:21,500 --> 00:25:25,500 Y podría aquí declarar un nuevo método abstracto. 381 00:25:26,279 --> 00:25:32,960 Que todos los instrumentos de 4K cordas tendrán que tener, pero no todos los instrumentos con cuerda. 382 00:25:32,960 --> 00:25:37,880 Como por ejemplo 383 00:25:37,880 --> 00:25:40,460 Public 384 00:25:40,460 --> 00:25:42,579 Abstract 385 00:25:42,579 --> 00:25:46,309 Void 386 00:25:46,309 --> 00:25:49,210 Mejorar 387 00:25:49,210 --> 00:25:54,539 Hay un 388 00:25:54,539 --> 00:25:57,779 Algo que puede hacer sobre los instrumentos 389 00:25:57,779 --> 00:25:59,119 Con cuatro cuartas que es mejorar 390 00:25:59,119 --> 00:26:01,339 Que si lo mejoro, hace, no lo sé 391 00:26:01,339 --> 00:26:02,920 Porque dependerá 392 00:26:02,920 --> 00:26:05,180 Del instrumento que tengo por debajo 393 00:26:05,180 --> 00:26:08,019 Claro, probablemente 394 00:26:08,019 --> 00:26:09,779 Pero el ukulele, por ejemplo 395 00:26:09,779 --> 00:26:12,140 si tú aprendes mucho el ukelele 396 00:26:12,140 --> 00:26:14,019 lo bajas poquito, si aprendes 397 00:26:14,019 --> 00:26:16,079 mucho violín, bajas 398 00:26:16,079 --> 00:26:17,680 mucho el nivel de fastidio, entonces 399 00:26:17,680 --> 00:26:20,460 hacen cosas distintas, no lo sé, me lo invento 400 00:26:20,460 --> 00:26:22,059 ¿sí? pero como no 401 00:26:22,059 --> 00:26:23,380 lo sé, lo dejo allí 402 00:26:23,380 --> 00:26:25,160 ¿sí? 403 00:26:26,640 --> 00:26:27,019 ¿de acuerdo? 404 00:26:27,839 --> 00:26:29,319 vamos a hacer ahora 405 00:26:29,319 --> 00:26:34,690 un ukelele 406 00:26:34,690 --> 00:26:36,730 ukelele, así 407 00:26:36,730 --> 00:26:40,279 clase ukelele 408 00:26:40,279 --> 00:26:41,700 clase ukelele, red de 409 00:26:41,700 --> 00:26:47,259 instrumento 410 00:26:47,259 --> 00:26:49,619 con cuatro 411 00:26:49,619 --> 00:26:51,119 cuerdas 412 00:26:51,119 --> 00:26:53,640 ¿vale? y aquí me dice 413 00:26:53,640 --> 00:26:54,700 oye mira que 414 00:26:54,700 --> 00:26:57,460 le falta el constructor 415 00:26:57,460 --> 00:26:59,859 le falta, añadamos el constructor 416 00:26:59,859 --> 00:27:01,900 ¿vale? entonces el ukulele 417 00:27:01,900 --> 00:27:04,180 le paso un nivel de fastidio 418 00:27:04,180 --> 00:27:05,720 y me llama el constructor 419 00:27:05,720 --> 00:27:07,980 de cuatro cuerdas 420 00:27:07,980 --> 00:27:09,980 con su nivel de fastidio 421 00:27:09,980 --> 00:27:11,539 ¿sí? vale, ahora 422 00:27:11,539 --> 00:27:13,660 Decidimos si le añadimos algo más 423 00:27:13,660 --> 00:27:15,799 Sigue enfadándose 424 00:27:15,799 --> 00:27:17,240 Se va a mirar y dice 425 00:27:17,240 --> 00:27:19,579 Claro, no me has puesto abstracto 426 00:27:19,579 --> 00:27:21,839 Y estás extendiendo una clase abstracta 427 00:27:21,839 --> 00:27:24,059 Entonces los métodos abstractos 428 00:27:24,059 --> 00:27:25,359 Los tienes que implementar 429 00:27:25,359 --> 00:27:27,299 ¿Cuántos métodos me va a poner? 430 00:27:34,210 --> 00:27:34,589 Dos 431 00:27:34,589 --> 00:27:37,589 Afinar y mejorar 432 00:27:37,589 --> 00:27:41,009 No me pondrá 433 00:27:41,009 --> 00:27:42,549 Sonar 434 00:27:42,549 --> 00:27:44,609 Porque sonar ya lo he implementado 435 00:27:44,609 --> 00:27:46,470 ¿Sí? 436 00:27:46,470 --> 00:27:51,200 Mira, me voy hacia atrás, ¿vale? 437 00:27:51,660 --> 00:27:53,819 Soy ukulele, voy a instrumento con cuerdas 438 00:27:53,819 --> 00:27:56,660 Aquí que he dejado para hacer, que he dejado abstracto 439 00:27:56,660 --> 00:27:58,680 He dejado este método de aquí 440 00:27:58,680 --> 00:28:01,279 Que es nuevo aquí, que lo he puesto yo 441 00:28:01,279 --> 00:28:04,339 Y también he implementado sonar 442 00:28:04,339 --> 00:28:06,039 Por lo tanto, sonar ya está implementado 443 00:28:06,039 --> 00:28:09,740 Pero derivaba desde aquí, que estaba también a afinar 444 00:28:09,740 --> 00:28:12,700 Cosa que en vez no he hecho aquí 445 00:28:12,700 --> 00:28:15,700 Por lo tanto, me heredan dos 446 00:28:15,700 --> 00:28:18,059 me han llegado hasta mi dos métodos 447 00:28:18,059 --> 00:28:19,920 que son abstractos y que todavía 448 00:28:19,920 --> 00:28:21,160 no tienen una implementación 449 00:28:21,160 --> 00:28:22,759 entonces si yo aquí le digo 450 00:28:22,759 --> 00:28:25,680 añadir an implemented me pone 451 00:28:25,680 --> 00:28:27,259 mejorar y afinar 452 00:28:27,259 --> 00:28:29,680 ¿vale? como es un ukulele 453 00:28:29,680 --> 00:28:31,240 cada vez que 454 00:28:31,240 --> 00:28:33,359 mejoro 455 00:28:33,359 --> 00:28:35,619 10.nivel de fastidio 456 00:28:35,619 --> 00:28:36,400 menos menos 457 00:28:36,400 --> 00:28:39,900 ¿si? mientras aprendo 458 00:28:39,900 --> 00:28:41,819 cuando voy a mejorar reduzco el nivel 459 00:28:41,819 --> 00:28:42,759 de fastidio un poquito 460 00:28:42,759 --> 00:28:46,079 Afinar 461 00:28:46,079 --> 00:28:48,619 Pues lo que tendrá que hacer 462 00:28:48,619 --> 00:28:50,779 Bueno, en el ukulele tengo que hacer una cosa parecida 463 00:28:50,779 --> 00:28:51,859 A la guitarra 464 00:28:51,859 --> 00:28:54,019 De pillarme esto 465 00:28:54,019 --> 00:28:59,059 Solo que en vez de 466 00:28:59,059 --> 00:29:01,140 6 tendrá 4 cuerdas 467 00:29:01,140 --> 00:29:13,690 Esto no lo necesito 468 00:29:13,690 --> 00:29:17,400 Fijaos que 469 00:29:17,400 --> 00:29:18,740 En el super 470 00:29:18,740 --> 00:29:21,279 Yo aquí ya le he metido que es 4 471 00:29:21,279 --> 00:29:23,579 Entonces esto ya tiene 4 cuerdas, lo sabe ya 472 00:29:23,579 --> 00:29:25,640 Porque es un instrumento con 4 cuerdas 473 00:29:25,640 --> 00:29:32,259 Entonces puedo crearme tranquilamente el número de cuerdas en base a cuántas cuerdas tengo, que será 4. 474 00:29:34,220 --> 00:29:48,819 Y luego pillaré el afinar, solo que aquí cuando afino no tengo 6 cuerdas, sino solo 4. 475 00:29:52,490 --> 00:29:55,329 Afinado, ukulele. 476 00:29:55,329 --> 00:29:58,410 Y son distintas. 477 00:29:58,410 --> 00:30:01,089 Esto es un sol 478 00:30:01,089 --> 00:30:04,759 Esto es un do 479 00:30:04,759 --> 00:30:10,049 Esto es un mi 480 00:30:10,049 --> 00:30:14,069 E, E, E, C, D, E 481 00:30:14,069 --> 00:30:17,210 Y esto de aquí es un la 482 00:30:17,210 --> 00:30:19,420 ¿Sí? 483 00:30:20,680 --> 00:30:22,099 ¿Veis que hace lo mismo? 484 00:30:22,539 --> 00:30:23,839 Pero de una forma un poco distinta 485 00:30:23,839 --> 00:30:29,079 Allá hacía seis cuerdas con ciertas notas 486 00:30:29,079 --> 00:30:31,119 Aquí hace cuatro cuerdas con otras notas 487 00:30:31,119 --> 00:30:45,170 Por lo tanto, afinar es hechizo de cuarto o quinto nivel de los magos 488 00:30:45,170 --> 00:30:50,049 Polimórfico, muy bien 489 00:30:50,049 --> 00:30:54,470 Habéis atendido muy bien la clase de antes 490 00:30:54,470 --> 00:30:59,529 Me gusta cuando sois así de... 491 00:30:59,529 --> 00:31:06,130 Afinar es el mismo método en clases distintas que hace cosas parecidas pero distintas 492 00:31:06,130 --> 00:31:10,369 Afina los instrumentos pero los afina de forma distinta 493 00:31:10,369 --> 00:31:12,029 Estamos dando polimorfismo 494 00:31:12,029 --> 00:31:14,369 Este método se dice que es polimórfico 495 00:31:15,829 --> 00:31:16,049 ¿Sí? 496 00:31:17,769 --> 00:31:18,829 Muy bien 497 00:31:18,829 --> 00:31:21,130 Entonces, y con esto ya he configurado todo 498 00:31:21,130 --> 00:31:22,369 Ahora ya puedo utilizar mis ukeleles 499 00:31:22,970 --> 00:31:23,789 Ukeleles 500 00:31:23,789 --> 00:31:25,009 No sé, ¿cómo se dice? 501 00:31:26,650 --> 00:31:28,509 Me voy aquí 502 00:31:28,509 --> 00:31:29,369 Y me digo 503 00:31:29,369 --> 00:31:32,369 Instrumento con cuerda 504 00:31:33,289 --> 00:31:35,450 Y dos 505 00:31:35,450 --> 00:31:37,569 No sé qué es 506 00:31:37,569 --> 00:31:38,670 Es un new 507 00:31:38,670 --> 00:31:47,329 Le pasó algo al ukelele 508 00:31:47,329 --> 00:31:49,430 Le pasaba 509 00:31:49,430 --> 00:31:50,390 El nivel de fastidio 510 00:31:50,390 --> 00:31:52,730 El fastidio es 511 00:31:52,730 --> 00:31:53,630 Dos 512 00:31:53,630 --> 00:31:58,720 Y ahora yo puedo hacer lo que hacía aquí 513 00:31:58,720 --> 00:32:00,460 Con el ukelele 514 00:32:00,460 --> 00:32:01,019 Vale 515 00:32:01,019 --> 00:32:03,960 Y dos punto descríbete 516 00:32:03,960 --> 00:32:06,839 Y dos punto afinar 517 00:32:06,839 --> 00:32:10,680 Y dos punto sonar 518 00:32:10,680 --> 00:32:20,579 Son instrumentos de cuatro cuerdas 519 00:32:20,579 --> 00:32:49,759 afinado. Pregunta, ¿puedo mejorar? No puedo mejorar. ¿Por qué no puedo mejorar? Porque un instrumento 520 00:32:49,759 --> 00:33:01,180 con cuerda no tiene mejorar. Yo soy una referencia como instrumento con cuerda. Solo puedo hacer lo 521 00:33:01,180 --> 00:33:07,259 que hace instrumento con cuerda. Está claro que como tengo en instrumento con cuerda afinar, 522 00:33:07,259 --> 00:33:09,240 Que luego lo he heredado 523 00:33:09,240 --> 00:33:11,220 Y lo he sobrescrito 524 00:33:11,220 --> 00:33:13,180 Cuando yo uso mejorar 525 00:33:13,180 --> 00:33:15,500 Me va a usar el de la instancia 526 00:33:15,500 --> 00:33:16,299 O sea, perdón 527 00:33:16,299 --> 00:33:19,579 Cuando voy a usar afinar me va a usar el de la instancia 528 00:33:19,579 --> 00:33:21,000 Entonces me va a usar 529 00:33:21,000 --> 00:33:22,480 Este afinar 530 00:33:22,480 --> 00:33:24,220 El afinar de ukulele 531 00:33:24,220 --> 00:33:26,000 ¿Sí? 532 00:33:26,519 --> 00:33:27,940 Pero este mejorar 533 00:33:27,940 --> 00:33:31,200 No es de la clase instrumento con cuerda 534 00:33:31,200 --> 00:33:34,279 Es de la clase instrumento con cuatro cuerdas 535 00:33:34,279 --> 00:33:37,019 Entonces cuando yo trato 536 00:33:37,019 --> 00:33:44,039 eso como instrumento con cuerda el por dentro hasta lo tendrá pero no lo puedo 537 00:33:44,039 --> 00:34:03,920 usar desde i2 que tendré que hacer como se llama esto y ahora fijaos que aparece 538 00:34:03,920 --> 00:34:30,659 aquí que ha aparecido aquí como se llama esto como se llama esto 539 00:34:30,659 --> 00:34:37,210 exacto muy bien ahí como como se te ha ocurrido 540 00:34:37,210 --> 00:34:39,710 recordaos como una jerarquía 541 00:34:39,710 --> 00:34:42,010 cuando voy por arriba de esta jerarquía 542 00:34:42,010 --> 00:34:43,210 como es aquí 543 00:34:43,210 --> 00:34:47,760 aquí estoy metiendo algo que está debajo 544 00:34:47,760 --> 00:34:49,739 pero lo estoy considerando como si fuera 545 00:34:49,739 --> 00:34:52,059 algo de arriba, estoy haciendo upcasting 546 00:34:52,059 --> 00:34:53,920 sin embargo 547 00:34:53,920 --> 00:34:55,800 cuando desde aquí algo que está 548 00:34:55,800 --> 00:34:58,400 para arriba lo voy a considerar 549 00:34:58,400 --> 00:34:59,920 como algo que está por debajo 550 00:34:59,920 --> 00:35:01,760 en la cadena de la cosa, pues estoy haciendo 551 00:35:01,760 --> 00:35:02,539 downcasting 552 00:35:02,539 --> 00:35:05,420 en general es un casting explícito 553 00:35:05,420 --> 00:35:07,039 si 554 00:35:07,039 --> 00:35:10,260 Entonces, si yo este de aquí 555 00:35:10,260 --> 00:35:12,019 Que era un instrumento con cuerda 556 00:35:12,019 --> 00:35:13,420 Ahora le digo Sima en particular 557 00:35:13,420 --> 00:35:16,000 Trata que eres un instrumento con cuatro cuerdas 558 00:35:16,000 --> 00:35:17,579 Mejorar, pues bien 559 00:35:17,579 --> 00:35:18,679 Me funciona 560 00:35:18,679 --> 00:35:19,800 Oye, cuidado 561 00:35:19,800 --> 00:35:22,460 Si yo pillo esto 562 00:35:22,460 --> 00:35:27,380 Y le pongo White Hard 563 00:35:27,380 --> 00:35:30,420 Punto 564 00:35:30,420 --> 00:35:32,599 Ahora la guitarra puede mejorar 565 00:35:32,599 --> 00:35:39,019 ¿Qué pasa? 566 00:35:45,250 --> 00:35:46,110 Entonces, ¿qué pasará? 567 00:35:47,110 --> 00:35:47,969 O sea, ¿me da error? 568 00:35:49,090 --> 00:35:49,429 No 569 00:35:49,429 --> 00:35:55,110 Pilla una guitarra, trátala como un instrumento con cuatro cuerdas 570 00:35:55,110 --> 00:35:58,789 Y mejorala, porque los instrumentos con cuatro cuerdas sí tienen mejorar 571 00:35:58,789 --> 00:36:00,530 ¡Fenomenal! 572 00:36:01,530 --> 00:36:02,269 ¿Pero qué pasará? 573 00:36:08,000 --> 00:36:09,400 Class cast exception 574 00:36:09,400 --> 00:36:14,719 Porque no puedo transformar una guitarra en un instrumento de cuatro cuerdas 575 00:36:14,719 --> 00:36:21,110 Porque la guitarra no es instrumento de cuatro cuerdas 576 00:36:21,110 --> 00:36:25,530 Guitarra es un instrumento con cuerdas 577 00:36:25,530 --> 00:36:28,369 Pero no pasa por instrumento con cuatro cuerdas 578 00:36:28,369 --> 00:36:31,610 Por lo tanto, este es un cast ilegal 579 00:36:31,610 --> 00:36:33,909 Él aquí no lo puede saber 580 00:36:33,909 --> 00:36:36,750 Pero si vosotros que lo estáis haciendo 581 00:36:36,750 --> 00:36:37,889 ¿Cómo podría saberlo? 582 00:36:38,710 --> 00:36:39,650 Y por lo tanto, aquí 583 00:36:39,650 --> 00:36:41,650 ¿Cómo puedo ser seguro que esto se puede hacer? 584 00:36:58,559 --> 00:37:01,659 Si esta cosa de aquí que no sé bien qué es 585 00:37:01,659 --> 00:37:04,059 Resulta que es una instancia también 586 00:37:04,059 --> 00:37:05,880 De instrumento con cuatro cuerdas 587 00:37:05,880 --> 00:37:08,079 Entonces puede hacer tranquilamente 588 00:37:08,079 --> 00:37:10,340 El downcasting hacia abajo 589 00:37:10,340 --> 00:37:24,380 instrumento con cuatro cuerdas 590 00:37:24,380 --> 00:37:26,480 UQLL, hagamos que el UQLL 591 00:37:26,480 --> 00:37:27,980 como tiene un nivel de fastidio 592 00:37:27,980 --> 00:37:30,699 o los instrumentos de cuerdas, todos tienen un nivel de fastidio 593 00:37:30,699 --> 00:37:31,880 estaría guay que 594 00:37:31,880 --> 00:37:34,300 la descripción 595 00:37:34,300 --> 00:37:36,639 incluyera 596 00:37:36,639 --> 00:37:37,639 esta cosa 597 00:37:37,639 --> 00:37:41,679 entonces lo que puedo hacer 598 00:37:41,679 --> 00:37:44,559 es, me pillo el instrumento 599 00:37:44,559 --> 00:37:45,619 con cuatro cuerdas 600 00:37:45,619 --> 00:37:48,780 y lo que hago es sobre escribir también 601 00:37:48,780 --> 00:37:50,239 public 602 00:37:50,239 --> 00:37:52,059 void 603 00:37:52,059 --> 00:37:54,559 describeme 604 00:37:54,559 --> 00:37:59,659 describeme o describir 605 00:37:59,659 --> 00:38:01,360 como era, describete 606 00:38:01,360 --> 00:38:07,159 ahora, cuando yo 607 00:38:07,159 --> 00:38:09,219 describo, quiero escribir que tengo cuatro 608 00:38:09,219 --> 00:38:11,539 cuerdas, entonces eso quiero mantenerlo 609 00:38:11,539 --> 00:38:13,260 super 610 00:38:13,260 --> 00:38:15,219 punto, describete 611 00:38:15,219 --> 00:38:17,199 haz lo mismo que 612 00:38:17,199 --> 00:38:18,059 hacías antes 613 00:38:18,059 --> 00:38:21,079 pero además, añade 614 00:38:21,079 --> 00:38:22,619 detrás, siso 615 00:38:22,619 --> 00:38:25,219 y tengo nivel 616 00:38:25,219 --> 00:38:28,760 de fastidio, dos puntos, más 617 00:38:28,760 --> 00:38:31,980 10 puntos nivel de fastidio 618 00:38:31,980 --> 00:38:38,730 ahora, cuando yo describo 619 00:38:38,730 --> 00:38:43,429 una guitarra, solo me pondrá la descripción 620 00:38:43,429 --> 00:38:46,710 de instrumento con cuerda, pero cuando 621 00:38:46,710 --> 00:38:51,110 describo el ukelele, que es 622 00:38:51,110 --> 00:38:55,449 un instrumento con cuerda, pero tiene un instrumento 623 00:38:55,449 --> 00:39:05,250 con cuatro cuerdas sobrescrito, el método describete, el Java va a buscar el método 624 00:39:05,250 --> 00:39:09,969 sobrescrito más cercano a la instancia que yo soy. Un ukulele es un instrumento con cuatro 625 00:39:09,969 --> 00:39:14,969 cuerdas que es un instrumento con cuerdas. Por lo tanto va a usar esta implementación, 626 00:39:15,110 --> 00:39:21,050 no esta. Y de hecho me dice, soy un instrumento con cuatro cuerdas y tengo nivel de fastidio 627 00:39:21,050 --> 00:39:34,110 O sea que aquí, por polimorfismo, él la está utilizando, no el de instrumento con cuerda, 628 00:39:34,190 --> 00:39:37,849 sino el de instrumento con cuatro cuerdas, porque es un ukelele. 629 00:39:38,190 --> 00:39:59,400 Y si tú vas a mirar la estructura, nosotros tenemos instrumento con cuerda, 630 00:39:59,400 --> 00:40:02,340 Tenemos guitarra que hereda de aquí 631 00:40:02,340 --> 00:40:08,659 Tenemos instrumento con cuatro cuerdas por aquí 632 00:40:08,659 --> 00:40:10,519 Y tenemos el ukulele aquí 633 00:40:10,519 --> 00:40:15,030 Entonces, esto tiene de escríbete 634 00:40:15,030 --> 00:40:17,130 Pero esto también tiene de escríbete 635 00:40:17,130 --> 00:40:19,309 Cuando la instancia es un ukulele 636 00:40:19,309 --> 00:40:25,250 Él irá a buscar el primer de escríbete que encuentra en esta cadena de aquí 637 00:40:25,250 --> 00:40:30,570 Entonces usará el de instrumento con cuatro cuerdas 638 00:40:30,570 --> 00:40:38,010 Si yo ahora sobrescribo aquí otra vez el descríbete, usará el suyo. 639 00:40:40,809 --> 00:40:41,130 ¿Se entiende? 640 00:40:43,449 --> 00:40:49,150 Y todo esto sí, ni yo ir a hacer downcasting, upcasting o cosas por el estilo. 641 00:40:49,230 --> 00:40:51,070 Me lo hace él de forma implícita. 642 00:40:52,510 --> 00:41:03,679 Si yo el descríbete aquí lo sobrescribo otra vez. 643 00:41:04,699 --> 00:41:07,280 Fijaos que esto está llamando el suscríbete de quién. 644 00:41:07,280 --> 00:41:12,900 de instrumento con cuatro cuerdas 645 00:41:12,900 --> 00:41:15,159 que dentro llamará el de instrumento 646 00:41:15,159 --> 00:41:16,699 con cuerdas 647 00:41:16,699 --> 00:41:20,980 y aquí le añado algo más 648 00:41:20,980 --> 00:41:22,400 que hace solo el ukulele 649 00:41:22,400 --> 00:41:24,199 como por ejemplo 650 00:41:24,199 --> 00:41:27,079 el famosísimo 651 00:41:27,079 --> 00:41:28,440 uuuu 652 00:41:28,440 --> 00:41:32,289 samuel 653 00:41:32,289 --> 00:41:38,610 ahora el ukulele 654 00:41:38,610 --> 00:41:41,050 hace esto que es la parte 655 00:41:41,050 --> 00:41:43,349 del instrumento con cuerda 656 00:41:43,349 --> 00:41:45,170 esto que es la parte 657 00:41:45,170 --> 00:41:51,190 de el instrumento con cuatro cuerdas y éste que es la parte propia del ukulele 658 00:41:55,409 --> 00:42:05,159 dudas esto es más o menos cómo se usan estas cosas