1 00:00:01,000 --> 00:00:06,200 Vale, entonces, vamos a grabar este ejemplo por si luego sirve de algo 2 00:00:06,200 --> 00:00:10,519 Entonces, vamos a hacer un ejemplo de una interfaz, ¿vale? 3 00:00:10,660 --> 00:00:15,000 Vamos a utilizarla, a ver que sale y como que podemos hacer y cosas por el estilo 4 00:00:15,000 --> 00:00:20,080 He buscado ejemplos que no se han hecho por lo mismo, pero me se han hecho por lo mismo si no tengo fantasía 5 00:00:20,080 --> 00:00:22,940 Por lo tanto vamos por vehículo, ¿eh? Lo de siempre 6 00:00:22,940 --> 00:00:28,160 Entonces, la primera cosa es que si creo crear una interfaz 7 00:00:28,160 --> 00:00:33,079 En vez de crear una clase, puedo crear una interfaz 8 00:00:33,079 --> 00:00:34,700 ¿Vale? 9 00:00:35,140 --> 00:00:35,840 Misma cosa 10 00:00:35,840 --> 00:00:39,100 Esto de aquí he creado es 11 00:00:39,100 --> 00:00:42,579 New interface 12 00:00:42,579 --> 00:00:45,180 El nombre de la interfaz 13 00:00:45,180 --> 00:00:46,000 ¿Vale? 14 00:00:46,000 --> 00:00:50,439 Y nosotros creamos la interfaz 15 00:00:50,439 --> 00:00:52,299 El ejemplo que hemos hecho antes 16 00:00:52,300 --> 00:00:53,920 Así tenemos una referencia 17 00:00:53,920 --> 00:00:55,280 Puede moverse 18 00:00:55,280 --> 00:01:02,200 Para mí, creo que esta interfaz puede moverse 19 00:01:02,200 --> 00:01:04,260 La interfaz puede moverse 20 00:01:04,260 --> 00:01:10,040 Representa el concepto de algo que puede moverse 21 00:01:10,040 --> 00:01:15,300 En el momento en que alguien o algo o una clase puede moverse 22 00:01:15,300 --> 00:01:21,719 Tendrá que implementar un conjunto de métodos 23 00:01:21,719 --> 00:01:23,079 Que voy a definir aquí 24 00:01:23,079 --> 00:01:24,239 ¿Sí? 25 00:01:25,900 --> 00:01:28,959 Fijaos, aquí yo no los voy a implementar 26 00:01:28,959 --> 00:01:30,420 Voy simplemente a decir 27 00:01:30,420 --> 00:01:31,879 Que oye, mira, cualquier 28 00:01:31,879 --> 00:01:34,319 Cosa 29 00:01:34,319 --> 00:01:36,060 Que pueda moverse 30 00:01:36,060 --> 00:01:38,780 Pues tiene que implementar estos métodos de aquí 31 00:01:38,780 --> 00:01:39,680 ¿Vale? 32 00:01:39,680 --> 00:01:41,200 Por ejemplo 33 00:01:41,200 --> 00:01:45,400 Public int 34 00:01:45,400 --> 00:01:47,980 Desplazarse 35 00:01:47,980 --> 00:01:58,400 Fijaos que no lo implemento 36 00:01:58,400 --> 00:01:58,659 ¿Vale? 37 00:01:58,920 --> 00:01:59,760 Y estoy diciendo 38 00:01:59,760 --> 00:02:01,020 Eh mira, tiene que haber este aquí 39 00:02:01,020 --> 00:02:03,480 Podría ponerle un comentario para saber que es esto 40 00:02:03,480 --> 00:02:04,359 ¿Vale? 41 00:02:07,700 --> 00:02:09,039 Se mueve 42 00:02:09,039 --> 00:02:11,420 E indica 43 00:02:11,420 --> 00:02:13,840 Cuántos metros 44 00:02:13,840 --> 00:02:16,640 Se ha desplazado 45 00:02:17,979 --> 00:02:22,359 ¿Qué más 46 00:02:22,359 --> 00:02:24,799 Puede hacer algo que se puede mover? 47 00:02:31,060 --> 00:02:33,199 Sí, pero aquí no estamos modelizando 48 00:02:33,199 --> 00:02:35,439 Un objeto, estamos modelizando comportamiento 49 00:02:35,439 --> 00:02:37,199 ¿Qué mecanismos 50 00:02:37,959 --> 00:02:39,280 ¿Qué queremos 51 00:02:39,280 --> 00:02:40,620 Que él pueda hacer? 52 00:02:40,859 --> 00:02:42,120 Él podrá desplazarse 53 00:02:42,120 --> 00:02:44,479 Un objeto puede moverse, no sé, puede parar 54 00:02:44,479 --> 00:02:46,659 Si se puede moverse, puede parar también 55 00:02:46,659 --> 00:02:49,500 No lo sé, ¿eh? Luego... 56 00:02:49,500 --> 00:02:50,000 Uy, voy. 57 00:02:50,659 --> 00:02:51,099 Parar. 58 00:02:51,960 --> 00:02:52,719 Me lo invento. 59 00:02:53,039 --> 00:02:55,159 Como no tengo exactamente... 60 00:02:55,159 --> 00:02:58,139 No sé qué quiero hacer con esto, pues tampoco tengo... 61 00:02:58,139 --> 00:02:58,659 Mucha idea. 62 00:03:00,079 --> 00:03:01,659 Esto es... 63 00:03:03,579 --> 00:03:05,659 Puede moverse... 64 00:03:06,359 --> 00:03:07,740 Pero no lo hace. 65 00:03:12,300 --> 00:03:13,639 Otra cosa le queremos poner. 66 00:03:16,659 --> 00:03:27,819 Aquí yo estoy definiendo un contrato con todos los que implementen esta interfaz 67 00:03:27,819 --> 00:03:35,079 Diciendo si quieres implementar mi interfaz tendrás que implementar este método y este método aquí 68 00:03:35,079 --> 00:03:37,500 Sea lo que sea lo que tienen que hacer 69 00:03:37,500 --> 00:03:46,139 Está claro que la interfaz debería definir de forma clara que hace cada uno de estos métodos 70 00:03:46,140 --> 00:03:48,800 Luego la implementación con que lo haces 71 00:03:48,800 --> 00:03:50,420 Es tu responsabilidad 72 00:03:50,420 --> 00:03:51,640 Pero yo te digo que hace 73 00:03:51,640 --> 00:03:53,660 O sea, si desplazarse 74 00:03:53,660 --> 00:03:56,080 Luego resulta que otro lo implementa 75 00:03:56,080 --> 00:03:58,460 Con que escribe en pantalla 76 00:03:58,460 --> 00:03:58,980 Miau 77 00:03:58,980 --> 00:04:01,620 Pues has implementado el método, sí 78 00:04:01,620 --> 00:04:04,060 Pero no lo has implementado correctamente 79 00:04:04,060 --> 00:04:06,140 Con respecto a las especificaciones que te he dado 80 00:04:06,140 --> 00:04:08,200 Si yo os divido 81 00:04:08,200 --> 00:04:09,580 Este grupo de aquí 82 00:04:09,580 --> 00:04:11,220 Implementa un objeto 83 00:04:11,220 --> 00:04:14,280 Crea un objeto que implementa esta interfaz 84 00:04:14,280 --> 00:04:15,780 Y este grupo de aquí lo usa 85 00:04:15,780 --> 00:04:17,600 Y resulta que luego este de aquí 86 00:04:17,600 --> 00:04:18,899 Están hablando de un coche 87 00:04:18,899 --> 00:04:21,439 Y le llaman desplazarse para ver que se mueva 88 00:04:21,439 --> 00:04:23,839 Y vosotros habéis implementado que dice miau 89 00:04:23,839 --> 00:04:25,860 Pues luego el programa no funciona 90 00:04:25,860 --> 00:04:27,800 ¿Me explico? 91 00:04:29,120 --> 00:04:29,300 ¿Si? 92 00:04:30,439 --> 00:04:30,879 Vale 93 00:04:30,879 --> 00:04:33,000 Dejamoslo así 94 00:04:33,000 --> 00:04:34,980 Para hacerlo sencillo 95 00:04:34,980 --> 00:04:36,860 Entonces estos son los dos medios 96 00:04:36,860 --> 00:04:39,860 Vale, fenomenal, mi interfaz sigue ahí 97 00:04:39,860 --> 00:04:41,540 Ahora lo que puedo ir a hacer 98 00:04:41,540 --> 00:04:44,019 Es crearme una clase 99 00:04:44,019 --> 00:04:46,099 Y crearé la clase 100 00:04:46,099 --> 00:04:48,439 Vehículo 101 00:04:48,439 --> 00:04:54,539 Esta clase vehículo 102 00:04:54,539 --> 00:04:56,979 Puede tener lo que le da la gana 103 00:04:56,979 --> 00:04:59,579 Int, matricula 104 00:04:59,579 --> 00:05:01,719 Que es un identificador 105 00:05:01,719 --> 00:05:04,500 Luego puede tener 106 00:05:04,500 --> 00:05:05,319 Que se yo 107 00:05:05,319 --> 00:05:07,180 String, color 108 00:05:07,180 --> 00:05:10,219 Puede tener 109 00:05:10,220 --> 00:05:15,940 un método 110 00:05:15,940 --> 00:05:20,000 que es public void 111 00:05:20,000 --> 00:05:21,960 de escribir 112 00:05:21,960 --> 00:05:24,940 que dice 113 00:05:24,940 --> 00:05:30,000 soy un vehículo 114 00:05:30,820 --> 00:05:31,500 de 115 00:05:31,500 --> 00:05:32,440 vehículo 116 00:05:32,440 --> 00:05:35,820 de color 117 00:05:35,820 --> 00:05:37,100 más color 118 00:05:37,100 --> 00:05:41,620 Si, este es un método 119 00:05:41,620 --> 00:05:42,640 Propio de esta clase 120 00:05:42,640 --> 00:05:45,600 Y ahora yo le podría decir, si pero es claro que el vehículo 121 00:05:45,600 --> 00:05:47,260 Sea un 122 00:05:47,260 --> 00:05:49,000 Algo que pueda moverse 123 00:05:49,000 --> 00:05:51,540 ¿Cómo lo hago? Pues como antes aquí 124 00:05:51,540 --> 00:05:53,280 Extendía otra clase 125 00:05:53,280 --> 00:05:55,120 Ahora hago implement 126 00:05:55,120 --> 00:05:58,100 Puede moverse 127 00:05:58,100 --> 00:06:00,220 Y el se enfada 128 00:06:00,220 --> 00:06:01,720 Dice, oye mira 129 00:06:01,720 --> 00:06:03,480 Si has dicho que implement 130 00:06:03,480 --> 00:06:04,400 Puede moverse 131 00:06:04,400 --> 00:06:05,939 Error 132 00:06:05,939 --> 00:06:09,519 Tiene que implementar 133 00:06:09,519 --> 00:06:10,480 Los métodos 134 00:06:10,480 --> 00:06:12,540 Astratos desde 135 00:06:12,540 --> 00:06:14,899 Puede moverse, punto, parare 136 00:06:14,899 --> 00:06:16,959 Vale, o sea, faltan 137 00:06:16,959 --> 00:06:18,439 Algunos métodos 138 00:06:18,439 --> 00:06:20,339 Vale, entonces yo le puedo decir 139 00:06:20,339 --> 00:06:22,040 Mira, si ponmelo aquí debajo 140 00:06:22,040 --> 00:06:26,720 Entonces aquí 141 00:06:26,720 --> 00:06:28,779 Me han aparecido 142 00:06:28,779 --> 00:06:30,819 Los dos 143 00:06:30,819 --> 00:06:32,379 Métodos que tengo que hacer, vale 144 00:06:32,379 --> 00:06:34,040 Claramente de una forma mock 145 00:06:34,040 --> 00:06:35,900 En un cierto sentido, de la forma que 146 00:06:35,900 --> 00:06:37,500 ¿A qué hacen? Nada, ¿vale? 147 00:06:38,980 --> 00:06:39,439 Entonces 148 00:06:39,439 --> 00:06:42,240 En la interfaz se están mentirando, ¿no? 149 00:06:42,300 --> 00:06:43,960 Para que sean obligatorios ya 150 00:06:43,960 --> 00:06:45,720 Claro, esto 151 00:06:45,720 --> 00:06:47,439 Lo que me está diciendo es que 152 00:06:47,439 --> 00:06:50,300 Quien quiera implementar esta interfaz 153 00:06:50,300 --> 00:06:52,060 Tendrá necesariamente 154 00:06:52,060 --> 00:06:53,460 Que poner estos dos 155 00:06:53,460 --> 00:06:57,320 Y entonces si yo a mi vehículo 156 00:06:57,320 --> 00:06:59,379 Aquí le puedo decir, pues 157 00:06:59,379 --> 00:07:00,980 Interdesplazarse, cuando 158 00:07:00,980 --> 00:07:03,960 Este se desplaza, escribe 159 00:07:03,960 --> 00:07:05,160 Chiso 160 00:07:05,160 --> 00:07:08,740 Me estoy moviendo 161 00:07:08,740 --> 00:07:10,400 Moviendo 162 00:07:10,400 --> 00:07:12,780 Y luego devuelve 163 00:07:12,780 --> 00:07:14,400 100 metros 164 00:07:14,400 --> 00:07:16,180 Que es cuanto se mueve 165 00:07:16,180 --> 00:07:16,780 ¿Vale? 166 00:07:17,420 --> 00:07:18,460 Y separar 167 00:07:18,460 --> 00:07:19,000 Dice 168 00:07:19,000 --> 00:07:20,320 Chiso 169 00:07:20,320 --> 00:07:22,400 Me paro 170 00:07:23,080 --> 00:07:25,740 Ya está 171 00:07:25,740 --> 00:07:29,660 Los ha implementado 172 00:07:29,660 --> 00:07:29,920 Ahora 173 00:07:29,920 --> 00:07:32,760 Es un ejemplo sencillo 174 00:07:32,760 --> 00:07:33,020 ¿Vale? 175 00:07:33,019 --> 00:07:34,479 Un ejemplo más complejo 176 00:07:34,479 --> 00:07:36,359 Pues esto debería ser un proyecto más complejo 177 00:07:36,359 --> 00:07:37,740 Voy 178 00:07:37,740 --> 00:07:40,299 A probarlo 179 00:07:40,299 --> 00:07:42,839 Me creo una clase 180 00:07:42,839 --> 00:07:46,240 Prueba 181 00:07:46,240 --> 00:07:49,079 Con un main 182 00:07:49,079 --> 00:07:53,039 Y ahora voy a crear cosas 183 00:07:53,039 --> 00:07:55,199 Por ejemplo, puedo crear un vehículo 184 00:07:55,199 --> 00:07:57,719 Vehículo v1 185 00:07:57,719 --> 00:07:59,939 Es igual a new vehículo 186 00:07:59,939 --> 00:08:07,699 Y ahora puedo hacer que v1.describir 187 00:08:07,699 --> 00:08:09,180 Se puede describir 188 00:08:09,180 --> 00:08:14,699 v1.desplazarse 189 00:08:14,699 --> 00:08:20,279 v1.parar 190 00:08:29,939 --> 00:08:31,040 Se define 191 00:08:31,040 --> 00:08:32,679 Color en null 192 00:08:32,679 --> 00:08:34,320 Porque no he hecho un constructor 193 00:08:34,320 --> 00:08:36,299 Que me dijera cuál es el color 194 00:08:36,299 --> 00:08:37,500 Por lo tanto el color en null 195 00:08:37,500 --> 00:08:39,460 Me estoy moviendo 196 00:08:39,460 --> 00:08:41,519 ¿Vale? 197 00:08:42,139 --> 00:08:42,779 Fenomenal 198 00:08:42,779 --> 00:08:45,039 Aquí podría poner 199 00:08:45,039 --> 00:08:46,200 Int 200 00:08:46,200 --> 00:08:52,480 Metros 201 00:08:52,480 --> 00:08:55,919 Que son todos los metros 202 00:08:55,919 --> 00:08:56,960 Que ha hecho este vehículo 203 00:08:56,960 --> 00:08:59,259 Y cada vez que lanza a desplazarse 204 00:08:59,259 --> 00:09:01,819 Pues además de revolver a 100 205 00:09:01,819 --> 00:09:03,319 Lo que hace es 206 00:09:03,319 --> 00:09:05,500 Metros es igual 207 00:09:05,500 --> 00:09:06,519 Paso igual 208 00:09:06,519 --> 00:09:07,759 100 209 00:09:07,759 --> 00:09:11,200 Y cuando se describe 210 00:09:11,200 --> 00:09:16,460 Y es recorrido 211 00:09:16,460 --> 00:09:20,159 Más metros 212 00:09:20,159 --> 00:09:27,200 Entonces ahora cuando lanzo esto 213 00:09:29,259 --> 00:09:30,439 Que ha recorrido cero 214 00:09:30,439 --> 00:09:32,980 Si llego al final 215 00:09:32,980 --> 00:09:35,759 En prueba 216 00:09:35,759 --> 00:09:38,220 Y lo hago describir otra vez 217 00:09:38,220 --> 00:09:44,200 Ahora ha recorrido 218 00:09:44,200 --> 00:09:45,919 ¿Si? 219 00:09:46,899 --> 00:09:48,939 Estamos hasta aquí todos 220 00:09:48,939 --> 00:09:49,980 Vale 221 00:09:49,980 --> 00:09:51,519 ¿Qué más puede hacer? 222 00:09:53,019 --> 00:09:53,600 Pues 223 00:09:53,600 --> 00:09:56,319 Este es vehículo 224 00:09:56,320 --> 00:09:59,340 En vez de crearme 225 00:09:59,340 --> 00:10:00,620 Un objeto vehículo 226 00:10:00,620 --> 00:10:02,840 Lo que podría intentar hacer 227 00:10:02,840 --> 00:10:04,140 Es crearme un objeto 228 00:10:04,140 --> 00:10:05,520 Puede moverse 229 00:10:05,520 --> 00:10:16,680 Puedo hacer esto 230 00:10:23,220 --> 00:10:24,020 No 231 00:10:24,020 --> 00:10:24,860 Porque 232 00:10:24,860 --> 00:10:26,240 Un interfaz 233 00:10:26,240 --> 00:10:28,480 No se puede instanciar 234 00:10:28,480 --> 00:10:30,779 ¿Vale? Una clase se puede instanciar 235 00:10:30,779 --> 00:10:32,659 Una interfaz, no, no puedo crear 236 00:10:32,659 --> 00:10:33,720 Un nuevo objeto 237 00:10:33,720 --> 00:10:36,220 Pero si que lo que puedo hacer 238 00:10:36,220 --> 00:10:38,060 Es crear, es meter aquí 239 00:10:38,060 --> 00:10:40,480 En un objeto de tipo puede moverse 240 00:10:40,480 --> 00:10:42,019 Un cualquier 241 00:10:42,019 --> 00:10:43,200 Una cualquiera clase 242 00:10:43,200 --> 00:10:46,480 Que implemente eso 243 00:10:46,480 --> 00:10:52,180 ¿Si? Vale 244 00:10:52,180 --> 00:10:54,600 Ahora puedo hacer 245 00:10:54,600 --> 00:10:59,480 Y fijaos que solo me aparece 246 00:10:59,480 --> 00:11:03,379 Desplazarse, parar 247 00:11:03,379 --> 00:11:05,379 Y los ordenados de object 248 00:11:05,379 --> 00:11:07,200 Es decir, que ya no puede hacer 249 00:11:07,200 --> 00:11:09,720 Por ejemplo, describir o acceder a metros 250 00:11:09,720 --> 00:11:10,740 O cosas por el estilo 251 00:11:10,740 --> 00:11:12,279 Porque ahora mismo 252 00:11:12,279 --> 00:11:15,300 PM1 es un objeto 253 00:11:15,300 --> 00:11:16,060 Puede moverse 254 00:11:16,060 --> 00:11:18,399 De tipo 255 00:11:18,399 --> 00:11:21,440 Solo puede desplazarse o parar 256 00:11:21,440 --> 00:11:22,800 Esto yo lo puedo hacer 257 00:11:22,800 --> 00:11:33,180 Si lo lanzo 258 00:11:33,180 --> 00:11:35,660 Esto funciona 259 00:11:35,660 --> 00:11:38,060 Me está moviendo, me paro 260 00:11:38,060 --> 00:11:39,440 ¿Vale? ¿Qué pasa? 261 00:11:39,560 --> 00:11:39,660 Pero 262 00:11:39,660 --> 00:11:41,260 Que 263 00:11:41,260 --> 00:11:45,120 Las cosas propias de vehículos 264 00:11:45,120 --> 00:11:47,140 Están escondidas por debajo 265 00:11:47,140 --> 00:11:49,240 ¿Vale? Porque mi referencia 266 00:11:49,240 --> 00:11:50,240 Es de este tipo 267 00:11:50,240 --> 00:11:51,760 Yo no puedo hacer 268 00:11:51,759 --> 00:11:54,500 PM1.describir 269 00:11:54,500 --> 00:11:59,539 Porque 270 00:11:59,539 --> 00:12:01,559 El tipo puede moverse 271 00:12:01,559 --> 00:12:03,480 No tiene describir 272 00:12:03,480 --> 00:12:05,759 ¿Están de acuerdo con esto? 273 00:12:07,759 --> 00:12:09,360 Yo estoy utilizando este aquí 274 00:12:09,360 --> 00:12:10,700 Ahora, cuidado también 275 00:12:10,700 --> 00:12:13,759 Cuando yo llamo desplazarse 276 00:12:14,519 --> 00:12:17,519 No estoy llamando 277 00:12:17,519 --> 00:12:19,019 Este desplazarse 278 00:12:19,019 --> 00:12:20,340 Porque este desplazarse 279 00:12:20,340 --> 00:12:22,800 No tiene implementación 280 00:12:22,800 --> 00:12:26,840 Por polimorfismo 281 00:12:26,840 --> 00:12:29,220 Este desplazarse 282 00:12:29,220 --> 00:12:33,200 Se ha sobrescrito dentro del vehículo 283 00:12:33,200 --> 00:12:33,980 De aquí 284 00:12:33,980 --> 00:12:37,480 Y entonces cuando él va a elegir 285 00:12:37,480 --> 00:12:40,560 Si va a utilizar esto o este método 286 00:12:40,560 --> 00:12:43,740 Lo que va a hacer es mirar la instancia 287 00:12:43,740 --> 00:12:45,960 Y la instancia es un vehículo 288 00:12:45,960 --> 00:12:47,379 No es un puede moverse 289 00:12:47,379 --> 00:12:49,439 Y por lo tanto va a usar 290 00:12:49,439 --> 00:12:50,679 El desplazarse 291 00:12:50,679 --> 00:12:53,340 Más específico de la instancia 292 00:12:53,340 --> 00:12:54,620 Es decir esto 293 00:12:54,620 --> 00:12:57,659 ¿Ludas? 294 00:13:01,159 --> 00:13:01,919 Vale 295 00:13:01,919 --> 00:13:07,399 Porque yo podría hacer 296 00:13:17,379 --> 00:13:27,899 esforzar que PM1 297 00:13:27,899 --> 00:13:30,399 se vea 298 00:13:30,399 --> 00:13:32,240 como un vehículo 299 00:13:32,240 --> 00:13:39,820 y ahora 300 00:13:39,820 --> 00:13:42,840 veis que puedo acceder 301 00:13:42,840 --> 00:13:45,200 a todas las cosas del vehículo 302 00:13:45,200 --> 00:13:47,059 describir, desplazarse, etc. 303 00:13:47,379 --> 00:14:00,439 Y me funciona 304 00:14:00,439 --> 00:14:02,460 ¿Vale? 305 00:14:04,460 --> 00:14:05,639 Teniendo en cuenta que 306 00:14:05,639 --> 00:14:08,139 Esto lo puedo hacer 307 00:14:08,139 --> 00:14:09,500 Si estoy seguro 308 00:14:09,500 --> 00:14:11,759 Que este señor de aquí es un vehículo 309 00:14:11,759 --> 00:14:14,159 Si no, debería haber hecho algo como 310 00:14:14,159 --> 00:14:15,220 Sí 311 00:14:15,220 --> 00:14:18,200 PM1 312 00:14:18,200 --> 00:14:20,000 Instance of 313 00:14:20,000 --> 00:14:21,840 Vehículo 314 00:14:21,840 --> 00:14:25,519 Entonces 315 00:14:25,519 --> 00:14:28,060 Esto 316 00:14:28,060 --> 00:14:33,540 De esta forma sé que voy a llamar 317 00:14:33,540 --> 00:14:35,360 Este de aquí, si, solo si 318 00:14:35,360 --> 00:14:36,700 Efectivamente es un vehículo 319 00:14:36,700 --> 00:14:39,740 Mejor dicho, voy a hacer este casting 320 00:14:39,740 --> 00:14:41,279 De decir, oye 321 00:14:41,279 --> 00:14:43,560 Tráctame esta referencia, que es una referencia 322 00:14:43,560 --> 00:14:45,540 puede moverse como vehículo 323 00:14:45,540 --> 00:14:47,160 si, solo si 324 00:14:47,160 --> 00:14:49,580 efectivamente lo que tengo dentro es una instancia 325 00:14:49,580 --> 00:14:51,580 de vehículo, si no es una instancia de vehículo no lo hago 326 00:14:51,580 --> 00:14:54,520 ¿Dudas? 327 00:14:56,140 --> 00:14:56,500 Vale 328 00:14:56,500 --> 00:14:59,480 Pero, imaginémonos que 329 00:14:59,480 --> 00:15:01,780 el vehículo sea muy abstracto 330 00:15:01,780 --> 00:15:03,340 y yo digo, tengo los métodos descritos 331 00:15:03,340 --> 00:15:05,820 pero no sé bien cómo desplazarme 332 00:15:05,820 --> 00:15:07,080 o sea, parar 333 00:15:07,080 --> 00:15:09,540 es fácil, me paro, todos los vehículos 334 00:15:09,540 --> 00:15:10,760 cuando se paran, se paran 335 00:15:10,760 --> 00:15:13,480 ¿Vale? Pero eso de moverse es un poco 336 00:15:13,480 --> 00:15:15,460 Más complejo 337 00:15:15,460 --> 00:15:18,100 Dependerá de que tipo de 338 00:15:18,100 --> 00:15:19,680 De 339 00:15:19,680 --> 00:15:22,539 Vehículo es 340 00:15:22,539 --> 00:15:23,279 ¿Vale? 341 00:15:23,620 --> 00:15:27,100 Entonces decido, oye mira, esto no lo quiero implementar 342 00:15:27,100 --> 00:15:28,180 ¿Vale? 343 00:15:28,639 --> 00:15:29,860 No lo quiero implementar 344 00:15:29,860 --> 00:15:31,840 ¿Qué pasa? 345 00:15:31,879 --> 00:15:33,980 Que si no lo implemento, se enfada 346 00:15:33,980 --> 00:15:35,580 ¿Vale? 347 00:15:35,879 --> 00:15:37,200 Entonces podría decir, ah sí 348 00:15:37,200 --> 00:15:40,080 Pero claro, esto se enfada 349 00:15:40,080 --> 00:15:41,720 Porque dice, tienes que devolver algo, o sea 350 00:15:41,720 --> 00:15:44,000 No puedo implementarlo vacío 351 00:15:44,000 --> 00:15:46,379 Poner return cero, ya está, ha implementado 352 00:15:46,379 --> 00:15:48,200 Pero si lo que puedo hacer 353 00:15:48,200 --> 00:15:49,480 Es decir, espera, espera, espera 354 00:15:49,480 --> 00:15:54,000 Este 355 00:15:54,000 --> 00:15:59,100 Es un método abstracto 356 00:15:59,100 --> 00:16:00,100 ¿Vale? 357 00:16:00,660 --> 00:16:01,840 Pero no me lo 358 00:16:01,840 --> 00:16:04,500 No me permite hacerlo, ¿por qué no me permite hacerlo? 359 00:16:11,720 --> 00:16:23,519 Me he cargado una paréntesis 360 00:16:23,519 --> 00:16:24,379 Que no me tenía que cargar 361 00:16:24,379 --> 00:16:26,600 Y este abstracto yo aquí 362 00:16:26,600 --> 00:16:28,980 ¿Dónde está la paréntesis? 363 00:16:32,040 --> 00:16:33,500 Este abstracto aquí 364 00:16:33,500 --> 00:16:37,779 Ahí 365 00:16:37,779 --> 00:16:42,339 Es más 366 00:16:42,339 --> 00:16:47,839 Ahora ya no se queja 367 00:16:47,839 --> 00:16:50,299 Yo estoy implementando 368 00:16:50,299 --> 00:16:53,339 Una interfaz 369 00:16:53,339 --> 00:16:54,620 Esta interfaz me 370 00:16:54,620 --> 00:16:56,480 Me trae 371 00:16:56,480 --> 00:16:59,079 Todos estos métodos que son 372 00:16:59,079 --> 00:17:00,959 Astratos, aquí no pone astrato 373 00:17:00,959 --> 00:17:03,079 Pero todos los de la interfaz se asumen 374 00:17:03,079 --> 00:17:04,859 Como astrato, yo digo, mira 375 00:17:04,859 --> 00:17:05,980 Te la implemento 376 00:17:05,980 --> 00:17:09,420 Pero yo soy una clase abstracta 377 00:17:09,420 --> 00:17:11,480 Porque uno de estos métodos 378 00:17:11,480 --> 00:17:13,960 En realidad no lo he sobrescrito 379 00:17:13,960 --> 00:17:15,880 Lo he dejado allí 380 00:17:15,880 --> 00:17:17,900 Entonces tengo una clase abstracta 381 00:17:17,900 --> 00:17:19,339 Que implementa una interfaz 382 00:17:19,339 --> 00:17:21,079 ¿Si? 383 00:17:22,079 --> 00:17:23,220 Y eso quiere decir que 384 00:17:23,220 --> 00:17:25,599 Esta clase si tiene 385 00:17:25,599 --> 00:17:27,579 Este método de aquí 386 00:17:27,579 --> 00:17:29,900 Pero no lo implementa 387 00:17:30,500 --> 00:17:32,240 ¿Quién lo implementará? 388 00:17:32,579 --> 00:17:34,299 Pues alguien que extenderá 389 00:17:34,299 --> 00:17:34,860 Esta clase 390 00:17:34,860 --> 00:17:40,060 Aquí se enfada ahora 391 00:17:40,060 --> 00:17:41,940 Porque claro, ahora vehículo 392 00:17:41,940 --> 00:17:43,260 Ya no me vale 393 00:17:43,260 --> 00:17:46,020 Porque siendo una clase astrata 394 00:17:46,020 --> 00:17:47,600 No puedo crear un vehículo 395 00:17:47,600 --> 00:17:52,060 Volveré aquí 396 00:17:52,060 --> 00:17:53,380 Me creo 397 00:17:53,380 --> 00:17:55,220 Otra clase 398 00:17:55,220 --> 00:17:59,900 Esta clase aquí 399 00:17:59,900 --> 00:18:02,660 Es la clase 400 00:18:02,660 --> 00:18:03,840 ¿Cómo no? 401 00:18:04,120 --> 00:18:04,540 Coche 402 00:18:04,539 --> 00:18:08,359 Y la clase coche 403 00:18:08,359 --> 00:18:10,079 Extends 404 00:18:10,079 --> 00:18:11,720 Vehículo 405 00:18:11,720 --> 00:18:18,000 Ahora me está diciendo que a la clase coche 406 00:18:18,000 --> 00:18:19,119 Le faltan cosas 407 00:18:19,119 --> 00:18:21,500 ¿Cuál le falta? Desplazarse 408 00:18:21,500 --> 00:18:23,659 ¿Por qué no le falta tampoco 409 00:18:23,659 --> 00:18:26,180 Pararse? Porque pararse está aquí 410 00:18:26,180 --> 00:18:27,980 Parar 411 00:18:27,980 --> 00:18:29,039 Existe 412 00:18:29,039 --> 00:18:31,399 Ya ha sido implementado a este nivel 413 00:18:31,399 --> 00:18:32,279 A nivel de vehículo 414 00:18:32,279 --> 00:18:33,659 Todos los vehículos se paran igual 415 00:18:33,660 --> 00:18:38,300 Pero lo que hacía falta 416 00:18:38,300 --> 00:18:40,720 Era implementar este de aquí 417 00:18:40,720 --> 00:18:42,259 Que viene desde 418 00:18:42,259 --> 00:18:43,580 La interfaz 419 00:18:43,580 --> 00:18:44,380 ¿Vale? 420 00:18:44,800 --> 00:18:47,019 El vehículo implementa esa interfaz 421 00:18:47,019 --> 00:18:49,700 Pero aquí lo deja como abstracto 422 00:18:49,700 --> 00:18:51,019 Y por lo tanto 423 00:18:51,019 --> 00:18:53,519 Ahora este queda para implementarse 424 00:18:53,519 --> 00:18:55,400 Y es aquí donde digo 425 00:18:55,400 --> 00:18:58,420 Si, soy un cocho 426 00:18:58,420 --> 00:19:03,920 Como ROM 427 00:19:03,920 --> 00:19:09,220 Retorno a 100 428 00:19:09,220 --> 00:19:13,440 Puedo aquí 429 00:19:13,440 --> 00:19:15,300 Sumar 430 00:19:15,300 --> 00:19:17,400 Que me he movido 100 metros 431 00:19:17,400 --> 00:19:18,740 Puedo acceder a metros 432 00:19:28,420 --> 00:19:29,180 Tranquilamente. 433 00:19:29,360 --> 00:19:29,640 ¿Por qué? 434 00:19:30,100 --> 00:19:32,019 Porque lo estoy heredando desde aquí. 435 00:19:35,820 --> 00:19:36,580 Vale. 436 00:19:41,440 --> 00:19:43,160 Pues me creo otro vehículo. 437 00:19:46,720 --> 00:19:47,480 Clase. 438 00:19:48,660 --> 00:19:50,039 Y aquí creo avión. 439 00:19:53,039 --> 00:19:53,680 Avión. 440 00:19:54,580 --> 00:19:55,220 Extends. 441 00:19:56,279 --> 00:19:56,880 Vehículo. 442 00:19:58,420 --> 00:20:01,640 Entonces aquí me dice 443 00:20:01,640 --> 00:20:02,480 Mismo problema 444 00:20:02,480 --> 00:20:04,820 Añado la implementación 445 00:20:04,820 --> 00:20:07,200 Pero, claro, esto dice 446 00:20:07,200 --> 00:20:08,019 Si, so 447 00:20:08,019 --> 00:20:11,140 Soy un avión 448 00:20:11,140 --> 00:20:13,980 Los acentos 449 00:20:13,980 --> 00:20:16,340 Para evitar carácter raros 450 00:20:16,340 --> 00:20:18,300 Y metros 451 00:20:18,300 --> 00:20:20,740 Más, igual, mil 452 00:20:20,740 --> 00:20:23,039 Claro, más rápido 453 00:20:23,039 --> 00:20:27,200 Va más lejos 454 00:20:27,200 --> 00:20:30,740 si 455 00:20:30,740 --> 00:20:32,279 se entiende 456 00:20:32,279 --> 00:20:35,420 estas son implementaciones distintas 457 00:20:35,420 --> 00:20:37,080 ahora en este caso son parecidas 458 00:20:37,080 --> 00:20:38,420 porque es el ejemplo que es 459 00:20:38,420 --> 00:20:40,799 pero uno podría hacer de una forma 460 00:20:40,799 --> 00:20:42,220 uno completamente de otro 461 00:20:42,220 --> 00:20:44,740 se dice rom voy volando 462 00:20:44,740 --> 00:20:47,299 voy volando 463 00:20:47,299 --> 00:20:49,400 están haciendo 464 00:20:49,400 --> 00:20:51,460 una implementación completamente distinta 465 00:20:51,460 --> 00:20:53,799 del mismo método que es el método de desplazarse 466 00:20:53,799 --> 00:20:55,400 los dos al final 467 00:20:55,400 --> 00:20:57,140 Al cabo son objetos 468 00:20:57,140 --> 00:20:59,100 Que pueden moverse y lo que pueden hacer es 469 00:20:59,100 --> 00:21:01,140 Llamar desplazarse para desplazarse 470 00:21:01,140 --> 00:21:02,920 Pero como lo hacen 471 00:21:02,920 --> 00:21:04,759 Puede ser completamente distinto 472 00:21:04,759 --> 00:21:06,700 Son códigos completamente distintos 473 00:21:06,700 --> 00:21:09,440 Si yo quisiera por ejemplo 474 00:21:09,440 --> 00:21:12,440 En el caso de coches 475 00:21:12,440 --> 00:21:13,720 Yo quisiera poner 476 00:21:13,720 --> 00:21:16,560 No sé, todo terreno 477 00:21:16,560 --> 00:21:17,700 Y fórmula 1 478 00:21:17,700 --> 00:21:20,480 Cada uno correrá de distinta forma 479 00:21:20,480 --> 00:21:22,200 Entonces para poderle poner 480 00:21:22,200 --> 00:21:24,920 Tendría que ponerlo otra vez 481 00:21:24,920 --> 00:21:29,060 Puedes ponerlos a través de astrato 482 00:21:29,060 --> 00:21:30,700 O puedes no ponerlos a astrato 483 00:21:30,700 --> 00:21:32,600 Y hacer que un coche vaya de una forma 484 00:21:32,600 --> 00:21:33,800 Y el todoterreno vaya de otra 485 00:21:33,800 --> 00:21:36,480 Siempre con el concepto de sobrescriptura 486 00:21:36,480 --> 00:21:37,920 Ahora hacemos algo parecido 487 00:21:37,920 --> 00:21:38,480 ¿Vale? 488 00:21:39,019 --> 00:21:41,980 Y ahora tengo aviones y coches 489 00:21:41,980 --> 00:21:42,680 ¿Vale? 490 00:21:44,160 --> 00:21:45,279 Vamos a 491 00:21:45,279 --> 00:21:49,340 Crear otra clase 492 00:21:49,340 --> 00:21:51,820 Y hacemos la clase 493 00:21:51,820 --> 00:21:53,080 Coche 494 00:21:53,079 --> 00:21:55,899 De 495 00:21:55,899 --> 00:21:57,939 Carrera 496 00:21:57,939 --> 00:22:01,899 Si 497 00:22:01,899 --> 00:22:04,240 Coche de carrera 498 00:22:04,240 --> 00:22:05,859 Extende 499 00:22:05,859 --> 00:22:08,439 Coche 500 00:22:08,439 --> 00:22:11,119 Vale, fijaos que 501 00:22:11,119 --> 00:22:13,059 Ahora tenemos varias 502 00:22:13,059 --> 00:22:15,779 Casuísticas 503 00:22:15,779 --> 00:22:17,759 Casos distintos, vale 504 00:22:17,759 --> 00:22:19,740 Tenemos una clase 505 00:22:19,740 --> 00:22:21,500 Astrata con un 506 00:22:21,500 --> 00:22:23,759 objeto que hereda de la clase 507 00:22:23,759 --> 00:22:26,140 astrata y luego otra clase 508 00:22:26,140 --> 00:22:27,900 que hereda de una clase concreta 509 00:22:27,900 --> 00:22:28,779 vale 510 00:22:28,779 --> 00:22:31,720 aquí si os fijáis no me dice que 511 00:22:31,720 --> 00:22:33,839 falta nada, esta es una clase ya 512 00:22:33,839 --> 00:22:37,680 que puede ir, vale, y aquí podría 513 00:22:37,680 --> 00:22:39,240 poner string 514 00:22:39,240 --> 00:22:42,160 se dice escudería en español 515 00:22:42,160 --> 00:22:43,839 escudería 516 00:22:44,400 --> 00:22:47,700 y aquí sus 517 00:22:47,700 --> 00:22:49,579 constructores o lo que le da la gana 518 00:22:49,579 --> 00:22:51,380 vale, y puedo aquí 519 00:22:51,380 --> 00:22:52,340 Si quiero 520 00:22:52,340 --> 00:22:56,020 ¿Cómo se dice? 521 00:22:56,960 --> 00:22:59,180 Sobrescribir los métodos que yo quiera 522 00:22:59,180 --> 00:22:59,860 ¿Vale? 523 00:23:00,220 --> 00:23:01,540 Tanto de coche 524 00:23:01,540 --> 00:23:03,300 Como de vehículo 525 00:23:03,300 --> 00:23:05,000 Como de poder moverse 526 00:23:05,000 --> 00:23:05,840 ¿Vale? 527 00:23:06,040 --> 00:23:07,980 Todo llega allí heredado 528 00:23:07,980 --> 00:23:09,840 Por ejemplo, lo más obvio 529 00:23:09,840 --> 00:23:11,720 Es que haga algo distinto 530 00:23:11,720 --> 00:23:13,000 Aquí, ¿vale? 531 00:23:13,100 --> 00:23:14,540 Entonces, pillo 532 00:23:14,540 --> 00:23:18,760 Pillo esto 533 00:23:18,760 --> 00:23:21,220 Sobrescribo esto 534 00:23:21,220 --> 00:23:22,480 El coche 535 00:23:22,480 --> 00:23:24,460 De carrera 536 00:23:24,460 --> 00:23:28,299 Super duro 537 00:23:28,299 --> 00:23:30,819 ¿Vale? 538 00:23:31,180 --> 00:23:33,380 Y este, claro, es más rápido 539 00:23:33,380 --> 00:23:35,880 No como un avión, pero casi 540 00:23:35,880 --> 00:23:40,059 ¿Si? 541 00:23:41,480 --> 00:23:43,440 Y también podría decir 542 00:23:43,440 --> 00:23:45,860 Voy a 543 00:23:45,860 --> 00:23:47,380 Sobrescribir, por ejemplo 544 00:23:47,380 --> 00:23:49,380 La descripción de vehículo 545 00:23:51,220 --> 00:23:56,420 Y un coche carrera 546 00:23:56,420 --> 00:23:57,759 Dice soy un 547 00:23:57,759 --> 00:23:59,799 Coche 548 00:23:59,799 --> 00:24:02,420 De carrera 549 00:24:02,420 --> 00:24:04,500 De color 550 00:24:04,500 --> 00:24:05,860 No se que no se cuanto 551 00:24:05,860 --> 00:24:08,200 Y 552 00:24:08,200 --> 00:24:10,360 De la escuderia 553 00:24:10,360 --> 00:24:16,299 Y escuderia 554 00:24:19,000 --> 00:24:19,799 Vale 555 00:24:19,799 --> 00:24:22,839 Entonces su descripción ha cambiado 556 00:24:22,839 --> 00:24:28,299 ¿Está de acuerdo más o menos lo que tenemos? 557 00:24:28,659 --> 00:24:29,980 Vamos a probarlos 558 00:24:29,980 --> 00:24:31,180 A ver que pasa 559 00:24:31,180 --> 00:24:33,480 Estoy con la prueba, ¿vale? 560 00:24:33,740 --> 00:24:34,740 Estos de aquí 561 00:24:34,740 --> 00:24:37,099 Ya no los puedo usar 562 00:24:37,099 --> 00:24:38,700 Porque no puedo crear 563 00:24:38,700 --> 00:24:40,839 No puedo crear vehículos 564 00:24:40,839 --> 00:24:46,480 ¿Pero qué puedo hacer? 565 00:24:46,700 --> 00:24:48,740 Pues, puedo crearme 566 00:24:48,740 --> 00:24:51,359 Bueno, cada objeto se puede crear con su propia referencia 567 00:24:51,359 --> 00:24:53,880 Nosotros nos interesa utilizar un poco de polimorfismo 568 00:24:53,880 --> 00:24:54,259 ¿Vale? 569 00:24:54,640 --> 00:24:56,700 Entonces vamos a crear un vehículo 570 00:24:56,700 --> 00:25:04,779 Que es, por ejemplo, un coche 571 00:25:04,779 --> 00:25:11,559 Otro vehículo 572 00:25:18,740 --> 00:25:21,819 Vamos a ver, que es un avión 573 00:25:21,819 --> 00:25:28,279 Y otro vehículo 574 00:25:28,279 --> 00:25:32,279 Que es un coche de carrera 575 00:25:42,279 --> 00:25:42,720 ¿Sí? 576 00:25:45,319 --> 00:25:47,940 Vale, ¿y ahora qué puedo hacer con estas cosas aquí? 577 00:25:48,740 --> 00:25:49,319 Vamos a ver 578 00:25:49,319 --> 00:25:51,339 Un bucoche 579 00:25:51,339 --> 00:25:53,200 Punto 580 00:25:53,200 --> 00:25:56,019 Estas son las cosas que puede hacer 581 00:25:56,019 --> 00:25:58,279 Con un coche 582 00:25:58,279 --> 00:26:01,359 Que fijaos, son las cosas que puede hacer con un vehículo 583 00:26:01,359 --> 00:26:03,180 ¿Sí? 584 00:26:05,180 --> 00:26:06,480 Me puede escribir 585 00:26:06,480 --> 00:26:08,440 Desplazarse, cosas por el estilo 586 00:26:08,440 --> 00:26:10,420 Llamamos desplazarse sobre todo 587 00:26:10,420 --> 00:26:13,799 Y también 588 00:26:13,799 --> 00:26:15,220 Va avión 589 00:26:15,220 --> 00:26:19,579 Pues puede hacer las mismas cosas 590 00:26:19,579 --> 00:26:30,640 Y lo mismo 591 00:26:30,640 --> 00:26:33,860 El coche de carrera 592 00:26:39,220 --> 00:26:39,660 ¿Sí? 593 00:26:42,680 --> 00:26:44,059 Pueden hacer lo que hace vehículo 594 00:26:44,059 --> 00:26:46,039 Porque estas son todas referencias de vehículo 595 00:26:46,039 --> 00:26:46,720 ¿Vale? 596 00:26:47,359 --> 00:26:48,039 Lanzo 597 00:26:48,039 --> 00:26:51,359 Soy un coche 598 00:26:51,359 --> 00:26:52,859 Soy un avión, voy volando 599 00:26:52,859 --> 00:26:54,279 Soy un coche de carrera, super room 600 00:26:54,279 --> 00:26:57,259 Cada uno de ellos tiene su propio 601 00:26:57,259 --> 00:26:59,679 Desplazarse 602 00:26:59,679 --> 00:27:00,960 ¿Si? 603 00:27:01,599 --> 00:27:04,879 Porque coche tiene su desplazarse 604 00:27:04,879 --> 00:27:07,679 Avión tiene su desplazarse 605 00:27:07,679 --> 00:27:09,480 Coche de carrera tiene su desplazarse 606 00:27:09,480 --> 00:27:11,700 Fijaos que yo los he llamado 607 00:27:11,700 --> 00:27:13,240 Todos como vehículos 608 00:27:13,240 --> 00:27:20,900 Pero Java automáticamente ha ido a buscar el desplazarse más específico de cada uno de estos objetos 609 00:27:20,900 --> 00:27:22,920 En base a la instancia que son 610 00:27:22,920 --> 00:27:25,640 ¿Sí? 611 00:27:29,640 --> 00:27:30,880 Prueba 612 00:27:30,880 --> 00:27:33,279 Moverse 613 00:27:33,279 --> 00:27:36,140 No puede 614 00:27:36,140 --> 00:27:39,500 Puede moverse 615 00:27:39,500 --> 00:27:47,319 Esto también lo puedo hacer 616 00:27:47,319 --> 00:27:53,200 ¿Sí? 617 00:27:53,640 --> 00:27:54,519 Misma cosa 618 00:27:54,519 --> 00:27:55,859 ¿Por qué lo puedo hacer? 619 00:27:55,859 --> 00:28:03,720 Porque yo puedo decir que cualquier objeto que implemente la interfaz puede moverse 620 00:28:03,720 --> 00:28:06,859 Puedo utilizarlo con referencia puede moverse 621 00:28:07,799 --> 00:28:08,220 ¿Sí? 622 00:28:08,220 --> 00:28:11,240 Fijaos, pero, que si yo voy a mirar 623 00:28:11,240 --> 00:28:13,900 Por ejemplo, bucoche 624 00:28:13,900 --> 00:28:19,860 Aquí, por ejemplo, la descripción no la puedo llamar 625 00:28:19,860 --> 00:28:24,799 Porque dentro de puede moverse, no hay descripción 626 00:28:24,799 --> 00:28:27,519 Hay solo desplazarse o parar 627 00:28:27,519 --> 00:28:30,600 ¿De acuerdo con esto? 628 00:28:33,600 --> 00:28:34,360 Vale 629 00:28:34,360 --> 00:28:37,680 Vamos ahora a ver otra cosa 630 00:28:37,680 --> 00:28:41,279 Vamos a meternos otra vez 631 00:28:41,279 --> 00:28:42,140 Como vehículos 632 00:28:42,140 --> 00:28:46,759 De 633 00:28:46,759 --> 00:28:49,440 Espérate, coche carrera 634 00:28:49,440 --> 00:28:51,380 Describir 635 00:28:51,380 --> 00:28:54,860 Vamos a meter 636 00:28:54,860 --> 00:28:56,440 Que este es 637 00:28:56,440 --> 00:29:02,039 Esto es un 638 00:29:02,039 --> 00:29:04,420 ¿Cómo se llama esto? Un vehículo 639 00:29:04,420 --> 00:29:09,080 Y este también es un vehículo 640 00:29:09,080 --> 00:29:12,800 Y en vez de desplazarse 641 00:29:12,800 --> 00:29:13,960 Le pongo describir 642 00:29:13,960 --> 00:29:21,880 ¿Vale? 643 00:29:24,440 --> 00:29:25,120 Fijaos 644 00:29:25,120 --> 00:29:27,039 Que el coche 645 00:29:27,039 --> 00:29:30,200 Está diciendo que soy un vehículo 646 00:29:30,200 --> 00:29:32,200 De color no sé qué, no sé cuánto 647 00:29:32,200 --> 00:29:34,200 Mientras que el coche de carrera 648 00:29:34,200 --> 00:29:36,120 Dice, soy un coche de carrera 649 00:29:36,120 --> 00:29:37,380 De color no sé qué, no sé cuánto 650 00:29:37,380 --> 00:29:39,500 Escudería no sé qué, no sé cuánto 651 00:29:39,500 --> 00:29:41,519 Fijaos que 652 00:29:41,519 --> 00:29:44,039 Lo que quiero decir 653 00:29:44,039 --> 00:29:45,039 Es que coche 654 00:29:45,039 --> 00:29:48,420 No sobreescribe la descripción 655 00:29:48,420 --> 00:29:49,980 Entonces 656 00:29:49,980 --> 00:29:53,720 Yo estoy siempre utilizando 657 00:29:53,720 --> 00:29:55,700 Una forma de polimorfismo 658 00:29:55,700 --> 00:29:57,700 Pero 659 00:29:57,700 --> 00:30:00,960 No obstante yo sea un coche 660 00:30:00,960 --> 00:30:03,340 La versión 661 00:30:03,340 --> 00:30:05,400 más específica 662 00:30:05,400 --> 00:30:07,940 del método 663 00:30:07,940 --> 00:30:09,600 de escribir, no es la 664 00:30:09,600 --> 00:30:11,380 de coche, porque aquí no está 665 00:30:11,380 --> 00:30:13,520 de escribir, no ha sido sobrescrita 666 00:30:13,520 --> 00:30:15,420 y por lo tanto estoy usando 667 00:30:15,420 --> 00:30:16,660 la de mi padre 668 00:30:16,660 --> 00:30:18,920 por eso digo que soy un vehículo 669 00:30:18,920 --> 00:30:27,280 ahora, en vez de coche de carrera 670 00:30:27,280 --> 00:30:29,600 que sobrescribe, fijaos que ha saltado 671 00:30:29,600 --> 00:30:31,500 una generación, el abuelo 672 00:30:31,500 --> 00:30:33,500 tiene de escribir, el padre no 673 00:30:33,500 --> 00:30:35,500 lo tiene y el hijo vuelve a 674 00:30:35,500 --> 00:30:36,799 sobreescribir de escribir 675 00:30:36,799 --> 00:30:39,400 pues entonces cuando se va a llamar 676 00:30:39,400 --> 00:30:41,460 de escribir sobre un coche de carrera 677 00:30:41,460 --> 00:30:43,519 se va a utilizar el más específico 678 00:30:43,519 --> 00:30:45,579 de esa instancia, o sea el que está definido 679 00:30:45,579 --> 00:30:47,259 en coche de carrera, esto 680 00:30:47,259 --> 00:30:49,420 se entiende 681 00:30:49,420 --> 00:30:51,019 más o menos por donde van los tiros 682 00:30:51,019 --> 00:30:55,460 y ahora 683 00:30:55,460 --> 00:30:57,839 me voy a hacer 684 00:31:01,500 --> 00:31:14,559 una nueva clase, que es la clase Persona. Aquí. Y, increíblemente, la clase Persona 685 00:31:14,559 --> 00:31:26,200 puede moverse. O es que solo los coches y los vehículos se pueden mover. Entonces, 686 00:31:26,200 --> 00:31:28,740 Si yo quiero que persona pueda moverse 687 00:31:28,740 --> 00:31:31,160 Necesita desplazarse 688 00:31:31,160 --> 00:31:31,680 Y parar 689 00:31:31,680 --> 00:31:37,180 Estoy parado 690 00:31:37,180 --> 00:31:45,559 Y aquí dice 691 00:31:45,559 --> 00:31:46,960 Ando un poquito 692 00:31:46,960 --> 00:31:53,920 Vale 693 00:31:56,200 --> 00:31:59,940 ahora qué pasa 694 00:31:59,940 --> 00:32:04,259 que nosotros antes en nuestra prueba 695 00:32:04,259 --> 00:32:11,259 yo podía utilizar aquí o vehículo puede moverse y cambiaba poco o nada 696 00:32:12,039 --> 00:32:15,120 porque menos mal vehículo era como 697 00:32:15,120 --> 00:32:20,539 la la la 698 00:32:20,539 --> 00:32:23,920 la parte más alta de esta jerarquía de que 699 00:32:23,920 --> 00:32:30,759 Un vehículo, un coche es un vehículo, un coche carrera es un coche que es un coche vehículo, un avión es un vehículo, etcétera, etcétera, etcétera. 700 00:32:30,759 --> 00:32:45,100 Me cambiaban las cosas que podía hacer, ¿os acordáis? Que si hago vavión punto, me salen algunos métodos menos, porque me sale solo desplazar y parar. 701 00:32:45,100 --> 00:32:48,320 Si en vez lo uso su coche, por ejemplo 702 00:32:48,320 --> 00:32:51,800 Me aparecen también las cosas 703 00:32:51,800 --> 00:32:54,480 Además de desplazarse y de parar 704 00:32:54,480 --> 00:32:56,220 Que son las cosas que he heredado 705 00:32:56,220 --> 00:33:00,920 Pues me aparecen también las cosas que son propias del vehículo 706 00:33:00,920 --> 00:33:01,900 ¿Sí? 707 00:33:01,900 --> 00:33:05,020 Lo que pone ahí de object 708 00:33:05,020 --> 00:33:08,900 Lo que explicaste es que da... 709 00:33:08,900 --> 00:33:09,640 Esto 710 00:33:09,640 --> 00:33:10,980 No 711 00:33:10,980 --> 00:33:13,960 Donde pone vehículo, vehículo 712 00:33:13,960 --> 00:33:15,960 puede moverse en otros pone 713 00:33:15,960 --> 00:33:17,799 object, eso sería lo que dijiste 714 00:33:17,799 --> 00:33:20,680 de lo de la herencia 715 00:33:20,680 --> 00:33:22,299 de que todo venía heredado 716 00:33:22,299 --> 00:33:22,840 de object 717 00:33:22,840 --> 00:33:26,160 de aquí se ve algunas cosas que vienen 718 00:33:26,160 --> 00:33:28,579 heredadas de object como por ejemplo 719 00:33:28,579 --> 00:33:30,059 el weight 720 00:33:30,059 --> 00:33:31,880 o el notify all 721 00:33:31,880 --> 00:33:32,620 o el 722 00:33:32,620 --> 00:33:34,660 equals 723 00:33:34,660 --> 00:33:36,640 to string 724 00:33:36,640 --> 00:33:39,420 vale, pero 725 00:33:39,420 --> 00:33:42,620 no, en el sentido de 726 00:33:42,620 --> 00:33:44,660 No sé que estás viendo tú de object 727 00:33:44,660 --> 00:33:46,280 Que deriva de object 728 00:33:46,280 --> 00:33:47,120 Pero aquí no se ve 729 00:33:47,120 --> 00:33:50,360 Los object que ves aquí son 730 00:33:50,360 --> 00:33:52,800 O lo que devuelve o lo que usa como parámetro 731 00:33:52,800 --> 00:33:54,520 De estos métodos 732 00:33:54,520 --> 00:33:56,080 Llegaremos allí, por ahora 733 00:33:56,080 --> 00:33:57,440 Dejamoslo a un lado, vale 734 00:33:57,440 --> 00:34:00,760 Lo que quiero decir con esto es 735 00:34:00,760 --> 00:34:01,560 Vale, muy bien 736 00:34:01,560 --> 00:34:04,760 Y si ahora 737 00:34:04,760 --> 00:34:05,940 Yo quiero hacer 738 00:34:05,940 --> 00:34:08,160 Un array de 739 00:34:08,160 --> 00:34:10,619 Cosas que pueden moverse 740 00:34:10,619 --> 00:34:12,799 Porque además de los vehículos 741 00:34:12,799 --> 00:34:14,759 Quiero poder poner 742 00:34:14,759 --> 00:34:16,699 Objetos 743 00:34:16,699 --> 00:34:18,440 Persona, lo puedo hacer 744 00:34:18,440 --> 00:34:21,339 Por ejemplo 745 00:34:21,339 --> 00:34:23,139 Yo puedo hacer un 746 00:34:23,139 --> 00:34:25,000 Puede moverse 747 00:34:25,000 --> 00:34:28,179 Array 748 00:34:28,179 --> 00:34:32,859 Es igual a new 749 00:34:32,859 --> 00:34:34,539 Puede moverse 750 00:34:34,539 --> 00:34:36,119 De 751 00:34:36,119 --> 00:34:38,920 5 752 00:34:38,920 --> 00:34:43,519 Me he creado un array 753 00:34:43,519 --> 00:34:45,139 De cinco 754 00:34:45,139 --> 00:34:46,619 Posiciones 755 00:34:46,619 --> 00:34:48,240 De tipo puede mover 756 00:34:48,240 --> 00:34:49,360 ¿Vale? 757 00:34:49,980 --> 00:34:51,760 Entonces, ¿Qué voy a hacer aquí dentro? 758 00:34:51,920 --> 00:34:53,320 Pues, en array 759 00:34:53,320 --> 00:34:55,360 De cero 760 00:34:55,360 --> 00:34:58,380 Puedo poner, por ejemplo 761 00:34:58,380 --> 00:35:00,200 Un nuevo 762 00:35:00,200 --> 00:35:02,079 Coach 763 00:35:02,079 --> 00:35:07,960 En array de uno 764 00:35:07,960 --> 00:35:13,159 Puedo poner un nuevo vehículo 765 00:35:13,159 --> 00:35:14,720 Puedo hacerlo 766 00:35:14,720 --> 00:35:17,880 ¿Por qué no? 767 00:35:20,760 --> 00:35:23,740 Porque vehículo es abstracto, no puedo crear un vehículo 768 00:35:23,740 --> 00:35:26,360 Un instante vehículo no lo puedo hacer 769 00:35:26,360 --> 00:35:30,740 Lo que puedo hacer es crearme un vehículo 770 00:35:30,740 --> 00:35:34,000 Que en realidad es un coche carrera, por ejemplo 771 00:35:34,000 --> 00:35:36,480 Y ponerlo tranquilamente allí dentro 772 00:35:36,480 --> 00:35:44,300 Estoy diciendo que en esta red aquí 773 00:35:44,300 --> 00:35:47,240 Que contiene objetos de tipo puede moverse 774 00:35:47,240 --> 00:35:48,900 Te estoy metiendo 775 00:35:48,900 --> 00:35:50,119 VCDC 776 00:35:50,119 --> 00:35:53,320 Que es un vehículo como referencia 777 00:35:53,320 --> 00:35:55,119 Y que dentro tiene 778 00:35:55,119 --> 00:35:56,480 Una red 779 00:35:56,480 --> 00:35:59,219 Una instancia 780 00:35:59,219 --> 00:36:00,099 Coche de carrera 781 00:36:00,099 --> 00:36:03,519 Fijaos que aquí estoy trabajando con tres tipos 782 00:36:03,519 --> 00:36:07,559 La referencia de este array 783 00:36:07,559 --> 00:36:09,059 Es que es un puede moverse 784 00:36:09,059 --> 00:36:10,780 Aquí dentro hay todas las celdas 785 00:36:10,780 --> 00:36:13,079 Contienen un objeto puede moverse 786 00:36:13,079 --> 00:36:15,099 Y yo le estoy metiendo dentro 787 00:36:15,099 --> 00:36:17,320 Un objeto cuyo tipo es vehículo 788 00:36:17,320 --> 00:36:19,159 Que en realidad contiene 789 00:36:19,159 --> 00:36:21,280 Una instancia que es coche de carrera 790 00:36:21,280 --> 00:36:23,239 Tres tipos 791 00:36:23,239 --> 00:36:24,199 Están jugando aquí 792 00:36:24,199 --> 00:36:27,400 Si no entiendo bien que son estos de los tipos 793 00:36:27,400 --> 00:36:29,259 Que es una clase, que la clase define 794 00:36:29,259 --> 00:36:30,440 Un tipo, etc, etc 795 00:36:30,440 --> 00:36:32,759 Pues aquí luego llega un momento en que me lío 796 00:36:32,760 --> 00:36:35,140 porque no sé que estoy haciendo 797 00:36:35,140 --> 00:36:36,540 pero es más 798 00:36:36,540 --> 00:36:39,000 y aquí dentro puedo poner 799 00:36:39,000 --> 00:36:40,100 en array 800 00:36:40,100 --> 00:36:43,640 de 2 801 00:36:43,640 --> 00:36:47,020 creo un new 802 00:36:47,020 --> 00:36:48,780 coche de 803 00:36:48,780 --> 00:36:50,760 carrera directamente 804 00:36:50,760 --> 00:36:53,380 en array 805 00:36:53,380 --> 00:36:54,820 de 3 806 00:36:54,820 --> 00:36:57,000 pongo un new avión 807 00:36:57,000 --> 00:37:00,400 y en array 808 00:37:00,400 --> 00:37:01,940 de 4 809 00:37:01,940 --> 00:37:07,139 Pongo 810 00:37:07,139 --> 00:37:08,659 Mi pecho 811 00:37:08,659 --> 00:37:15,000 Fijaos que 812 00:37:15,000 --> 00:37:16,960 Este array puede moverse 813 00:37:16,960 --> 00:37:19,119 Contiene dentro 814 00:37:19,119 --> 00:37:20,240 Todos los objetos 815 00:37:20,240 --> 00:37:22,380 De tipos distintos 816 00:37:22,380 --> 00:37:24,760 Porque tiene uno, dos, tres, cuatro y cinco 817 00:37:24,760 --> 00:37:26,420 Tipos distintos aquí dentro 818 00:37:26,420 --> 00:37:28,139 Pero todos son 819 00:37:28,139 --> 00:37:29,539 Accomunados por una cosa 820 00:37:29,539 --> 00:37:31,320 Tienen en común una cosa 821 00:37:31,320 --> 00:37:48,400 Todos implementan 822 00:37:48,400 --> 00:37:49,480 No heredan 823 00:37:49,480 --> 00:37:52,039 Implementan la interfaz puede moverse 824 00:37:52,039 --> 00:37:54,000 Todas las clases que estoy usando aquí 825 00:37:54,000 --> 00:37:56,680 Implementan las clases puede moverse 826 00:37:56,680 --> 00:37:58,400 ¿Y qué implica esto? 827 00:37:58,559 --> 00:38:00,360 Que yo ahora puedo hacer tranquilamente 828 00:38:00,360 --> 00:38:01,000 un for 829 00:38:01,000 --> 00:38:04,539 puede 830 00:38:04,539 --> 00:38:05,780 moverse 831 00:38:05,780 --> 00:38:08,180 pm 832 00:38:08,180 --> 00:38:10,140 dos puntos 833 00:38:10,140 --> 00:38:11,079 array 834 00:38:11,079 --> 00:38:15,820 y decir que pm 835 00:38:15,820 --> 00:38:16,599 punto 836 00:38:16,599 --> 00:38:18,860 desplazarse 837 00:38:18,860 --> 00:38:23,820 porque 838 00:38:23,820 --> 00:38:25,500 todos los array 839 00:38:25,500 --> 00:38:28,019 todas las cosas que estoy metiendo aquí dentro 840 00:38:28,019 --> 00:38:30,099 independientemente de que sean 841 00:38:30,099 --> 00:38:31,619 coches o lo que sea 842 00:38:31,619 --> 00:38:33,159 ¿Te puedo robar dos minutitos? 843 00:38:34,259 --> 00:38:35,179 Déjame un segundo 844 00:38:35,179 --> 00:38:38,319 Vale, perfecto 845 00:38:38,319 --> 00:38:40,539 Todos los 846 00:38:40,539 --> 00:38:42,279 los objetos 847 00:38:42,279 --> 00:38:43,480 que tengo aquí dentro 848 00:38:43,480 --> 00:38:45,719 son de tipo puede moverse 849 00:38:45,719 --> 00:38:47,259 y entonces 850 00:38:47,259 --> 00:38:49,839 puedo llamar los métodos 851 00:38:49,839 --> 00:38:51,779 de puede moverse sobre cualquiera 852 00:38:51,779 --> 00:38:52,900 de estos objetos de aquí 853 00:38:52,900 --> 00:38:55,420 Por polimorfismo 854 00:38:55,420 --> 00:38:57,480 cada uno utilizará el suyo 855 00:38:57,480 --> 00:38:59,079 ¿Sí? 856 00:38:59,079 --> 00:39:02,119 Entonces cuando ahora lo lanzo 857 00:39:02,119 --> 00:39:06,039 Que empieza desde 858 00:39:06,039 --> 00:39:10,159 Espera que pongo 859 00:39:10,159 --> 00:39:19,880 A partir de aquí 860 00:39:19,880 --> 00:39:20,960 Hace esta cosa aquí 861 00:39:20,960 --> 00:39:22,579 Si veamos que escribe 862 00:39:22,579 --> 00:39:25,920 Y utiliza 863 00:39:25,920 --> 00:39:27,900 Esto es el desplazarse de coche 864 00:39:27,900 --> 00:39:30,119 Este es el desplazarse de coche de carrera 865 00:39:30,119 --> 00:39:31,280 Otro de coche de carrera 866 00:39:31,280 --> 00:39:34,460 Acordaos que esto lo había guardado como si fuera 867 00:39:34,460 --> 00:39:36,280 La referencia vehículo 868 00:39:36,280 --> 00:39:39,400 Mientras este es directamente un objeto coche de carrera 869 00:39:39,400 --> 00:39:40,599 O soy un avión 870 00:39:40,599 --> 00:39:41,920 O soy una persona 871 00:39:41,920 --> 00:39:44,400 Me da igual que 872 00:39:44,400 --> 00:39:46,820 Hereden de lo mismo o de lo que sea 873 00:39:46,820 --> 00:39:47,119 ¿Vale? 874 00:39:47,160 --> 00:39:50,639 Puede ser una cosa que no está en la cadena de herencia 875 00:39:50,639 --> 00:39:53,119 Que yo he creado de vehículo, coche, cosa por el estilo 876 00:39:53,119 --> 00:39:54,720 La persona no es un vehículo 877 00:39:54,720 --> 00:39:56,920 Pero como implementa el puede moverse 878 00:39:56,920 --> 00:39:58,180 También lo puedo meter aquí 879 00:39:58,180 --> 00:40:00,420 ¿Sí? 880 00:40:01,599 --> 00:40:03,200 ¿Y para qué sirve esto? 881 00:40:03,599 --> 00:40:03,920 Pues 882 00:40:03,920 --> 00:40:05,260 Depende 883 00:40:05,260 --> 00:40:08,420 Pero ya he hecho que 884 00:40:08,420 --> 00:40:10,460 Si hay una acción 885 00:40:10,460 --> 00:40:12,480 Que puedan hacer todos mis objetos 886 00:40:12,480 --> 00:40:14,920 No obstante sean los objetos más heterogéneos 887 00:40:15,500 --> 00:40:16,139 Que queráis 888 00:40:16,139 --> 00:40:18,559 Porque uno es una persona, uno es un vehículo 889 00:40:18,559 --> 00:40:20,059 Uno es un gato, uno es no sé qué 890 00:40:20,059 --> 00:40:22,539 Pero como todo se implementa la misma 891 00:40:22,539 --> 00:40:24,780 ¿Cómo se llama? 892 00:40:24,780 --> 00:40:25,820 La misma interfaz 893 00:40:25,820 --> 00:40:28,440 que es como mi contrato 894 00:40:28,440 --> 00:40:29,880 que cualquiera que implemente esta 895 00:40:29,880 --> 00:40:32,280 interfaz tiene que poder hacer esto 896 00:40:32,280 --> 00:40:34,260 pues estos dos métodos lo puedo llamar 897 00:40:34,260 --> 00:40:35,080 sobre todos 898 00:40:35,080 --> 00:40:38,340 los objetos que sean 899 00:40:38,340 --> 00:40:39,840 de tipo puede moverse 900 00:40:39,840 --> 00:40:41,880 lo que es 901 00:40:41,880 --> 00:40:43,620 bastante potente 902 00:40:43,620 --> 00:40:48,320 y otra cosa es, yo en cada momento 903 00:40:48,320 --> 00:40:49,920 puedo intentar acceder 904 00:40:49,920 --> 00:40:52,539 a las cosas específicas 905 00:40:52,539 --> 00:40:53,620 de cada uno de ellos 906 00:40:53,620 --> 00:40:55,260 yo puedo preguntarme 907 00:40:55,260 --> 00:40:57,900 IC 908 00:40:57,900 --> 00:40:59,920 PM 909 00:40:59,920 --> 00:41:02,280 Instance of 910 00:41:02,280 --> 00:41:09,840 Persona 911 00:41:09,840 --> 00:41:11,980 Tiene otro método 912 00:41:11,980 --> 00:41:12,540 Persona 913 00:41:12,540 --> 00:41:17,460 Un método que 914 00:41:17,460 --> 00:41:19,440 Una clase que tenga solo un método 915 00:41:19,440 --> 00:41:21,040 Espectativo, bueno lo hago en persona 916 00:41:21,040 --> 00:41:22,660 Persona puede también 917 00:41:22,659 --> 00:41:25,460 public void saludar 918 00:41:25,460 --> 00:41:28,739 que los demás no tienen 919 00:41:28,739 --> 00:41:32,000 que dice hola 920 00:41:32,000 --> 00:41:32,339 vale 921 00:41:32,339 --> 00:41:35,539 entonces yo lo que puedo hacer aquí es decirme 922 00:41:35,539 --> 00:41:36,960 y además si 923 00:41:36,960 --> 00:41:38,899 la pm 924 00:41:38,899 --> 00:41:41,639 el objeto que estoy mirando ahora de este array 925 00:41:41,639 --> 00:41:42,879 es un instancia 926 00:41:42,879 --> 00:41:44,559 instancia persona 927 00:41:44,559 --> 00:41:47,759 entonces lo que puedes 928 00:41:47,759 --> 00:41:49,579 hacer es un casting 929 00:41:49,579 --> 00:41:51,639 a persona 930 00:41:51,639 --> 00:41:53,940 De este PM 931 00:41:53,940 --> 00:41:56,139 Y llamarme 932 00:41:56,139 --> 00:41:57,400 Saludar 933 00:41:57,400 --> 00:42:01,519 Si 934 00:42:01,519 --> 00:42:03,719 Y entonces 935 00:42:03,719 --> 00:42:05,759 Ahora salud