1 00:00:00,900 --> 00:00:21,920 Entonces, esta clase cliente de tienda, por el hecho de heredar de cliente, simplemente por poner el extensa ahí, solo por eso, esta clase tiene no solo la propiedad dirección que hemos escrito ahí, sino que tiene las que están en la clase de la querida. 2 00:00:21,920 --> 00:00:35,620 Estas dos, ¿vale? Y además tiene los get, los set, todos los métodos, ¿vale? Ahí está todo, ¿vale? 3 00:00:38,200 --> 00:00:48,040 Bueno, pues esto lo hace muy cómodo, lo hace muy cómodo y vimos la comodidad de hacer esto cuando ahora ya hacíamos una aplicación que gestionaba diferentes tipos de clientes. 4 00:00:48,040 --> 00:00:49,460 Aquí vimos la comodidad. 5 00:00:50,700 --> 00:00:51,900 Nos, primero vimos. 6 00:00:52,020 --> 00:00:52,920 ¿Cómo se hace lo de la herencia? 7 00:00:53,060 --> 00:00:56,940 Pues haces el extensa y lo que hay arriba lo tienes abajo, ¿vale? 8 00:00:57,520 --> 00:00:59,620 Aquí ya hay matices que hay que meter. 9 00:01:00,219 --> 00:01:03,000 ¿Recordáis cuando vimos los modificadores de acceso que dije? 10 00:01:03,140 --> 00:01:14,200 En realidad, tú puedes poner el private, el public, no poner nada, que no poner nada es como poner un omitido que se llama package, que significa desde el mismo paquete. 11 00:01:14,439 --> 00:01:19,420 O el protected, y el protected dije este, nos olvidamos de él porque tiene que ver con la herencia. 12 00:01:19,900 --> 00:01:21,200 Bueno, pues ya lo incorporaremos. 13 00:01:22,920 --> 00:01:23,260 Vale. 14 00:01:24,019 --> 00:01:29,159 Bueno, pues entonces nosotros lo que hemos visto es cómo heredar el extensa, las implicaciones que eso tiene. 15 00:01:29,159 --> 00:01:35,519 Y en este ejemplito vimos que eso luego nos da ventajas, que eso nos da ventajas ahora de gestionar las cosas. 16 00:01:36,260 --> 00:01:43,820 Nuestro main, nuestro main de aquí, ahora ya tenía un único almacén de datos, ya está. 17 00:01:44,599 --> 00:01:47,859 Tenía solamente objetos de la clase cliente. 18 00:01:48,980 --> 00:01:51,180 Y entonces, cuando un almacén de datos. 19 00:01:51,920 --> 00:02:02,340 Una variable está declarada de este tipo, está declarada de este tipo, significa que puede recibir objetos de ese tipo o de cualquiera de los herederos. 20 00:02:02,340 --> 00:02:06,599 Caben todos ahí, caben todos en esa referencia, eso es lo que significa. 21 00:02:07,379 --> 00:02:20,340 Y ahí, esa es la ventaja, esa es la ventaja, se hace todo esto de la herencia, se hace por eso, para que en una referencia declarada de una clase puedan caer objetos de esa clase, pero también de todas las que heredan. 22 00:02:20,340 --> 00:02:20,599 ¿Vale? 23 00:02:21,920 --> 00:02:38,240 Vamos a, lo vimos en la aplicación esta, vimos cómo yo aquí me hacía un array de clientes, pero luego en este array metía, en este array yo luego metía el que me daba la gana. 24 00:02:39,140 --> 00:02:45,840 O metía uno de tipo cliente tienda, o metía uno de tipo cliente online, ¿vale? 25 00:02:45,840 --> 00:02:51,200 Metíamos cualquiera de ellos, porque cabían en esa referencia, ¿vale? 26 00:02:51,920 --> 00:02:59,780 Vamos a dejar esto más claro, ¿vale? 27 00:02:59,780 --> 00:03:06,120 Aquí en un proyectito aparte, para que quede claro todos los matices. 28 00:03:12,360 --> 00:03:20,520 Lo voy a llamar ejemplo básico herencia, porque es solamente para recoger los detalles de la herencia y de cómo funcionan. 29 00:03:21,920 --> 00:03:29,180 aquí por ejemplo 30 00:03:29,180 --> 00:03:31,900 como yo he creado el proyecto así rápidamente 31 00:03:31,900 --> 00:03:33,680 lo digo para que estas cosas 32 00:03:33,680 --> 00:03:35,820 os pasen y yo no tengo desmarcada 33 00:03:35,820 --> 00:03:37,600 la casilla de generar 34 00:03:37,600 --> 00:03:39,740 el módulo e-info, pues me ha generado 35 00:03:39,740 --> 00:03:41,620 el módulo e-info, recordad 36 00:03:41,620 --> 00:03:43,680 que si el archivo 37 00:03:43,680 --> 00:03:44,780 tiene ese fichero 38 00:03:44,780 --> 00:03:47,980 entonces es obligatorio trabajar con paquetes 39 00:03:47,980 --> 00:03:49,600 porque si no 40 00:03:49,600 --> 00:03:50,980 trabajas con paquetes, luego 41 00:03:50,980 --> 00:03:53,480 la máquina virtual no va a encontrar las rutas 42 00:03:53,480 --> 00:03:55,440 porque el módulo e-info 43 00:03:55,440 --> 00:03:57,380 incorpora un mecanismo adicional 44 00:03:57,380 --> 00:03:58,220 para 45 00:03:58,220 --> 00:04:01,320 encontrar los paquetes 46 00:04:01,320 --> 00:04:03,480 bueno, de alguna manera es una especie 47 00:04:03,480 --> 00:04:05,700 de mecanismo que se introdujo desde Java 10 48 00:04:05,700 --> 00:04:07,240 para organizar los paquetes 49 00:04:07,240 --> 00:04:09,540 entonces, si tú incorporas ese fichero 50 00:04:09,540 --> 00:04:11,080 deberías 51 00:04:11,080 --> 00:04:13,460 incorporar en él información sobre 52 00:04:13,460 --> 00:04:15,520 tus paquetes, y si tienes uno por defecto 53 00:04:16,160 --> 00:04:17,700 pues entonces, si no lo dices 54 00:04:17,700 --> 00:04:19,800 ahí, no te va a funcionar la aplicación 55 00:04:19,800 --> 00:04:20,860 conclusión 56 00:04:20,860 --> 00:04:22,400 como no estamos en eso y no os da igual 57 00:04:22,400 --> 00:04:25,580 nos volváis locos 58 00:04:25,580 --> 00:04:26,680 con esas cosas si os pasan 59 00:04:26,680 --> 00:04:28,980 que generáis un proyecto, tiene este fichero 60 00:04:28,980 --> 00:04:30,780 luego lo ejecutáis y dice 61 00:04:30,780 --> 00:04:32,240 no encuentra el main, no encuentra el main 62 00:04:32,240 --> 00:04:35,620 claro, porque no estás trabajando con paquetes 63 00:04:35,620 --> 00:04:37,139 estás trabajando el paquete por defecto 64 00:04:37,139 --> 00:04:38,580 si estás trabajando el paquete por defecto 65 00:04:38,580 --> 00:04:41,000 tienes que reflejarlo en el módulo e-info, etc, etc 66 00:04:41,000 --> 00:04:43,759 entonces no estamos en eso 67 00:04:43,759 --> 00:04:44,460 así que 68 00:04:44,460 --> 00:04:47,379 lo digo por, bueno 69 00:04:47,379 --> 00:04:49,340 para que no perdáis tiempo en errores 70 00:04:49,340 --> 00:04:50,740 de estos que hay veces que se hay una y otra vez 71 00:04:50,860 --> 00:04:52,460 y son de chorradas de este estilo 72 00:04:52,460 --> 00:04:55,460 vale, bueno, yo en cualquier caso voy a hacer un paquete 73 00:04:55,460 --> 00:04:56,560 aunque no tenga el módulo e-info 74 00:04:56,560 --> 00:04:58,720 porque siempre es buena idea ya acostumbrarse 75 00:04:58,720 --> 00:05:01,160 a organizar uno, sus proyectos 76 00:05:01,160 --> 00:05:02,939 sus aplicaciones en paquetes 77 00:05:02,939 --> 00:05:05,379 donde se guarden clases 78 00:05:05,379 --> 00:05:07,420 que significan cosas diferentes 79 00:05:07,420 --> 00:05:09,540 pero vamos, esto como es un ejemplito 80 00:05:09,540 --> 00:05:10,920 básico para ver lo de la herencia 81 00:05:10,920 --> 00:05:12,879 pues va a ser una chorrada 82 00:05:12,879 --> 00:05:17,520 vale, pues venga, vamos a ver 83 00:05:17,520 --> 00:05:19,319 yo tengo aquí 84 00:05:19,319 --> 00:05:20,819 mi paquete de 85 00:05:20,860 --> 00:05:33,379 paquete, ahí 86 00:05:33,379 --> 00:05:37,420 vale, pues tengo aquí mi paquete 87 00:05:37,420 --> 00:05:39,180 de modelo para las entidades 88 00:05:39,180 --> 00:05:41,420 voy a hacer una entidad cualquiera 89 00:05:41,960 --> 00:05:43,199 de la que luego vamos a heredar 90 00:05:43,199 --> 00:05:44,139 vale 91 00:05:44,139 --> 00:05:47,860 por ejemplo, vamos a 92 00:05:47,860 --> 00:05:49,360 hacer 93 00:05:49,360 --> 00:05:50,199 una clase 94 00:05:50,199 --> 00:05:52,939 vale, de 95 00:05:52,939 --> 00:05:55,680 lo típico 96 00:05:55,680 --> 00:05:57,240 que es como mejor se entiende, animal 97 00:05:57,240 --> 00:05:58,079 venga 98 00:05:58,079 --> 00:06:01,339 una aplicación que gestiona animales 99 00:06:01,339 --> 00:06:02,980 pues entonces 100 00:06:02,980 --> 00:06:03,879 uno aquí 101 00:06:03,879 --> 00:06:07,459 las propiedades genéricas de un animal 102 00:06:07,459 --> 00:06:09,319 las que aplican a todos 103 00:06:09,319 --> 00:06:11,120 pues imaginaos que 104 00:06:11,120 --> 00:06:12,279 bueno, el nombre 105 00:06:12,279 --> 00:06:13,779 el nombre que recibe 106 00:06:13,779 --> 00:06:15,379 vale 107 00:06:20,199 --> 00:06:25,939 André Sile 108 00:06:25,939 --> 00:06:29,680 si le hacemos un constructor 109 00:06:29,680 --> 00:06:30,379 vale, entonces, vamos a escribir disculpas 110 00:06:30,379 --> 00:06:31,099 el nombre de una planta 111 00:06:31,099 --> 00:06:31,680 que lo escribo 112 00:06:31,680 --> 00:06:33,079 para que creamos 113 00:06:33,079 --> 00:06:33,879 una planificación 114 00:06:33,879 --> 00:06:35,439 entonces, vamos a escribir 115 00:06:35,439 --> 00:06:36,539 el nombre de un animal 116 00:06:36,539 --> 00:06:37,860 vale, entonces, vamos a escribir 117 00:06:37,860 --> 00:06:39,360 una planta 118 00:06:39,360 --> 00:06:40,699 y la explicamos 119 00:06:40,699 --> 00:06:42,399 por ejemplo, por ejemplo 120 00:06:42,399 --> 00:06:43,620 una cosa que no se sabe 121 00:06:43,620 --> 00:06:44,579 por ejemplo, para hacer 122 00:06:44,579 --> 00:06:45,419 una pesadilla 123 00:06:45,419 --> 00:06:46,879 o para hacer 124 00:06:46,879 --> 00:06:48,039 un telet Sadly 125 00:06:48,039 --> 00:06:48,800 como yo lo digo 126 00:06:48,800 --> 00:06:49,319 donde voy a ponerlos 127 00:06:49,319 --> 00:06:49,980 vamos a ponerlos en la descripción 128 00:06:49,980 --> 00:06:51,939 en este caso un oso 129 00:06:51,939 --> 00:06:55,400 vale, ahora 130 00:06:55,400 --> 00:07:01,160 hay ejemplos de animales en concreto 131 00:07:01,160 --> 00:07:03,700 vale, pues está el gato, está el perro, está el no sé qué 132 00:07:03,700 --> 00:07:07,100 entonces ahí tendría sentido que mi aplicación recoja además 133 00:07:07,100 --> 00:07:10,700 una clase gato para los animales que además sean gato 134 00:07:10,700 --> 00:07:16,460 o una clase pez para los animales que a su vez sean pez 135 00:07:16,460 --> 00:07:19,939 por ejemplo, pues entonces serían dos clases separadas 136 00:07:19,939 --> 00:07:41,339 vale, entonces tanto pez como perro 137 00:07:41,339 --> 00:07:43,579 como son animales, tienen nombre también 138 00:07:43,579 --> 00:07:46,000 porque hemos decidido que todos los animales tienen su nombre 139 00:07:46,000 --> 00:07:49,360 todo esto son decisiones que uno toma en la fase de diseño 140 00:07:49,360 --> 00:07:49,920 hemos decidido que todos los animales tienen su nombre 141 00:07:49,920 --> 00:07:51,540 hemos decidido que todos los animales van a tener nombre 142 00:07:51,540 --> 00:07:53,439 por eso lo pongo en la clase animal 143 00:07:53,439 --> 00:07:56,100 y ahora pez y perro aparte de su nombre 144 00:07:56,100 --> 00:07:58,439 tendrán sus propias propiedades 145 00:07:58,439 --> 00:08:00,939 entonces si realmente yo he decidido 146 00:08:00,939 --> 00:08:02,879 cuando he descrito mi situación 147 00:08:02,879 --> 00:08:04,939 que pez y perro sean animales 148 00:08:04,939 --> 00:08:06,500 porque lo he decidido que lo son 149 00:08:06,500 --> 00:08:07,580 y tiene sentido que lo sean 150 00:08:07,580 --> 00:08:11,480 pues entonces tendremos que incorporar aquí el extends 151 00:08:11,480 --> 00:08:12,540 vale 152 00:08:19,920 --> 00:08:33,440 vale 153 00:08:33,440 --> 00:08:40,080 vale, pues nada 154 00:08:40,080 --> 00:08:45,379 ahora decidimos que propiedades les añadimos a cada uno de ellos 155 00:08:45,379 --> 00:08:48,560 pues venga, que caracterizaría a un pez 156 00:08:48,560 --> 00:08:49,500 que no tiene sentido que caracterice a un pez 157 00:08:49,500 --> 00:08:52,539 que no tiene sentido que caracterice a todos los animales del universo 158 00:08:52,539 --> 00:08:54,179 que solo lo caracteriza a ellos 159 00:08:54,179 --> 00:08:55,179 solamente 160 00:08:55,179 --> 00:09:00,059 el tipo de blanquia por ejemplo 161 00:09:00,059 --> 00:09:03,299 bueno no, el acuífero en el que viven 162 00:09:03,299 --> 00:09:04,500 por ejemplo, el acuífero 163 00:09:05,100 --> 00:09:08,179 ¿no? un perro no vive en un acuífero 164 00:09:08,179 --> 00:09:11,340 el acuífero 165 00:09:11,340 --> 00:09:17,720 o sea, aquí iría solo lo que caracteriza 166 00:09:17,720 --> 00:09:19,220 al pez 167 00:09:19,500 --> 00:09:20,899 eso no tiene sentido que vaya en animal 168 00:09:20,899 --> 00:09:22,559 esto va aquí 169 00:09:22,559 --> 00:09:23,659 vale 170 00:09:23,659 --> 00:09:26,500 entonces si no hubiéramos hecho el extends 171 00:09:26,500 --> 00:09:28,759 además tendríamos que poner ahí el nombre 172 00:09:28,759 --> 00:09:30,259 no tenemos que ponérselo porque 173 00:09:30,259 --> 00:09:31,679 pez ya hereda de animal 174 00:09:31,679 --> 00:09:34,399 vale 175 00:09:34,399 --> 00:09:36,700 ¿y qué caracteriza a un perro que no caracterice 176 00:09:36,700 --> 00:09:38,019 al resto de los animales? 177 00:09:39,139 --> 00:09:40,480 ¿qué es propio suyo? 178 00:09:43,139 --> 00:09:44,659 cualquier chorrada 179 00:09:44,659 --> 00:09:46,039 raza 180 00:09:46,039 --> 00:09:48,179 vale, porque podría tener sentido 181 00:09:48,179 --> 00:09:49,480 que uno no quiera poner en un perro 182 00:09:49,500 --> 00:09:51,159 o raza, o sea, perdón, en un pez 183 00:09:51,159 --> 00:09:53,720 normalmente tú no distingues los pez por raza 184 00:09:53,720 --> 00:09:55,120 en todo caso por especie, ¿no? 185 00:09:55,759 --> 00:09:57,419 la raza quieres que esté solo en el 186 00:09:57,419 --> 00:09:59,200 cara a cara, te dice solo al perro 187 00:09:59,200 --> 00:10:00,200 vale, pues ya está 188 00:10:00,200 --> 00:10:04,419 vale, entonces 189 00:10:04,419 --> 00:10:11,340 vale, pues nada 190 00:10:11,340 --> 00:10:13,279 le ponemos el constructor 191 00:10:19,500 --> 00:10:33,240 y 192 00:10:33,240 --> 00:10:36,700 get y set de cada uno 193 00:10:42,360 --> 00:10:42,840 constructor 194 00:10:42,840 --> 00:10:43,940 general, vale 195 00:10:43,940 --> 00:10:48,740 y aquí me falta el get y el set 196 00:10:48,740 --> 00:10:49,340 vale 197 00:10:49,500 --> 00:10:53,179 lo del get y el set es por hábito 198 00:10:53,179 --> 00:10:54,480 porque las clases entidad 199 00:10:54,480 --> 00:10:59,360 lo habitual es que las manejemos 200 00:10:59,360 --> 00:11:00,740 a través de get y set, repito 201 00:11:00,740 --> 00:11:01,799 vale 202 00:11:01,799 --> 00:11:05,220 bueno, pues hala, yo aquí tengo un modelo muy sencillo 203 00:11:05,220 --> 00:11:06,700 ya está, un modelo muy sencillo 204 00:11:06,700 --> 00:11:09,559 la clase, super clase animal y subclases 205 00:11:09,559 --> 00:11:10,919 perro y pez, vale, ya está 206 00:11:10,919 --> 00:11:11,980 tengo un modelo muy sencillo 207 00:11:11,980 --> 00:11:14,679 y ahora vamos a ver a través de un main pequeñito 208 00:11:14,679 --> 00:11:16,860 pues efectivamente los matices 209 00:11:16,860 --> 00:11:18,019 del funcionamiento de la herencia 210 00:11:18,019 --> 00:11:19,159 a partir de un main 211 00:11:19,159 --> 00:11:22,079 para que nos queden ya bien claros 212 00:11:22,079 --> 00:11:24,339 vale, bueno, pues a ver 213 00:11:24,339 --> 00:11:25,740 nos vamos a hacer un main cualquiera 214 00:11:25,740 --> 00:11:26,600 muy pequeñito 215 00:11:26,600 --> 00:11:41,639 venga, pues nuestro main 216 00:11:41,639 --> 00:11:43,199 perdón 217 00:11:43,199 --> 00:11:45,720 si, es un paquete diferente 218 00:11:45,720 --> 00:11:47,639 porque normalmente las clases 219 00:11:47,639 --> 00:11:48,500 que son el modelo 220 00:11:48,500 --> 00:11:50,860 o las realidades, las entidades 221 00:11:50,860 --> 00:11:53,080 van en un paquete, las que hacen operaciones 222 00:11:53,080 --> 00:11:54,320 van en otro, entonces bueno 223 00:11:54,320 --> 00:11:56,279 aunque tengamos poquitas clases 224 00:11:56,279 --> 00:11:58,200 conviene que desde ya nos acostumbremos 225 00:11:58,200 --> 00:12:00,759 a que suelen ir a paquetes distintos 226 00:12:00,759 --> 00:12:02,860 en función de la 227 00:12:02,860 --> 00:12:04,399 función que cumplen 228 00:12:04,399 --> 00:12:07,240 en función del papel que desempeñan en la aplicación 229 00:12:07,240 --> 00:12:13,659 pues venga, nos hacemos aquí una clase main 230 00:12:18,500 --> 00:12:24,399 vale, pues entonces 231 00:12:24,399 --> 00:12:27,259 todo el rollo de la herencia 232 00:12:27,259 --> 00:12:28,340 y la importancia de la herencia 233 00:12:28,340 --> 00:12:29,820 se recogen, se recorre 234 00:12:29,820 --> 00:12:31,700 joder, se recogen esto 235 00:12:31,700 --> 00:12:33,700 yo tengo aquí 236 00:12:33,700 --> 00:12:35,120 declarada 237 00:12:35,120 --> 00:12:40,539 una referencia de tipo animal 238 00:12:40,539 --> 00:12:42,519 una referencia de tipo animal 239 00:12:42,519 --> 00:12:43,679 esta 240 00:12:43,679 --> 00:12:46,220 ahora mismo recordad 241 00:12:46,220 --> 00:12:48,059 que lo único que hemos declarado en memoria 242 00:12:48,059 --> 00:12:48,480 con esto es que 243 00:12:48,500 --> 00:12:50,519 lo único que hemos hecho es esto 244 00:12:50,519 --> 00:12:53,320 vale, esto es lo único que hemos hecho 245 00:12:53,320 --> 00:12:53,980 hemos creado 246 00:12:53,980 --> 00:12:55,600 una variable 247 00:12:55,600 --> 00:12:56,919 vale 248 00:12:56,919 --> 00:13:00,519 que se llama, esa variable 249 00:13:00,519 --> 00:13:01,940 se llama así 250 00:13:01,940 --> 00:13:04,500 no es el nombre que le hemos dado 251 00:13:05,240 --> 00:13:14,500 hemos creado una variable 252 00:13:14,500 --> 00:13:15,120 que se llama 253 00:13:15,120 --> 00:13:15,320 a 254 00:13:15,320 --> 00:13:18,480 esto 255 00:13:18,500 --> 00:13:19,500 , esto es lo único que hemos creado 256 00:13:19,500 --> 00:13:20,519 que está apuntando a qué 257 00:13:20,519 --> 00:13:22,899 está apuntando 258 00:13:22,899 --> 00:13:26,480 a null 259 00:13:26,480 --> 00:13:34,320 vale, esto es lo único que hemos hecho hasta ahora 260 00:13:34,320 --> 00:13:36,320 lo único que hemos hecho 261 00:13:36,320 --> 00:13:37,440 hemos creado 262 00:13:37,440 --> 00:13:39,899 una variable a 263 00:13:39,899 --> 00:13:42,419 que es una dirección de memoria 264 00:13:42,419 --> 00:13:43,759 pensada 265 00:13:43,759 --> 00:13:46,059 para apuntar a un objeto animal 266 00:13:46,059 --> 00:13:47,980 es lo único que hemos hecho hasta ahora 267 00:13:47,980 --> 00:13:48,480 con esa dirección de memoria 268 00:13:48,500 --> 00:13:49,019 declaración 269 00:13:49,019 --> 00:13:51,360 este espacio en memoria ya existe 270 00:13:51,360 --> 00:13:52,159 se llama a 271 00:13:52,159 --> 00:13:54,519 y contiene una dirección de memoria 272 00:13:54,519 --> 00:13:56,879 pensada para apuntar a un objeto animal 273 00:13:56,879 --> 00:13:58,340 que todavía no existe 274 00:13:58,340 --> 00:14:00,899 porque no hemos asignado 275 00:14:00,899 --> 00:14:02,700 aquí no le hemos asignado nada 276 00:14:02,700 --> 00:14:04,860 entonces por defecto 277 00:14:04,860 --> 00:14:06,620 java lo inicializa a algún valor 278 00:14:06,620 --> 00:14:08,740 lo inicializa a algo, por defecto 279 00:14:08,740 --> 00:14:11,000 entonces por defecto lo inicializa a null 280 00:14:11,000 --> 00:14:11,799 como ya sabemos 281 00:14:11,799 --> 00:14:12,940 entonces 282 00:14:12,940 --> 00:14:16,679 esto ahora mismo, si uno hiciera aquí 283 00:14:16,679 --> 00:14:17,679 un 284 00:14:18,500 --> 00:14:21,299 un system.out.println de a 285 00:14:21,299 --> 00:14:22,799 le saldría un null 286 00:14:22,799 --> 00:14:24,820 porque eso es lo que tiene a un null 287 00:14:24,820 --> 00:14:26,539 ¿vale? eso le saldría 288 00:14:26,539 --> 00:14:28,659 vale, bueno, pues ahora 289 00:14:28,659 --> 00:14:31,159 la herencia en realidad 290 00:14:31,159 --> 00:14:33,120 en que se traduce 291 00:14:33,120 --> 00:14:34,259 y para qué sirve 292 00:14:34,259 --> 00:14:36,100 pues se recoge simplemente en esta idea 293 00:14:36,100 --> 00:14:38,159 que ahora yo ya en esa referencia 294 00:14:38,159 --> 00:14:39,960 puedo si me da la gana 295 00:14:39,960 --> 00:14:42,320 meter un objeto animal 296 00:14:42,320 --> 00:14:43,460 si yo quiero 297 00:14:48,500 --> 00:14:55,500 , puedo hacer esto tranquilamente 298 00:14:55,500 --> 00:14:57,000 y perfecto 299 00:14:57,000 --> 00:14:59,860 ahora la referencia a se queda apuntada a un objeto animal 300 00:14:59,860 --> 00:15:02,500 con su única propiedad nombre 301 00:15:02,500 --> 00:15:04,879 porque el objeto animal no tiene más con lo que tiene 302 00:15:04,879 --> 00:15:08,480 eso lo puedo hacer tranquilamente 303 00:15:08,480 --> 00:15:09,679 pero no sólo eso 304 00:15:09,679 --> 00:15:12,620 sino que también en esa misma referencia a 305 00:15:12,620 --> 00:15:14,460 en esa misma referencia 306 00:15:14,460 --> 00:15:18,200 puedo meter un objeto de cualquiera de los que herede 307 00:15:18,200 --> 00:15:20,200 en esa misma referencia yo puedo también 308 00:15:20,200 --> 00:15:25,200 si me da la gana 309 00:15:25,200 --> 00:15:27,200 pues meter este objeto 310 00:15:27,200 --> 00:15:29,200 vale, el constructor este de 311 00:15:29,200 --> 00:15:31,200 perro, no sé ni cómo 312 00:15:31,200 --> 00:15:33,200 lo tengo hecho 313 00:15:33,200 --> 00:15:35,200 así, con los dos valores, vale 314 00:15:45,200 --> 00:15:47,200 ahí 315 00:15:48,200 --> 00:16:03,200 vale, a ver, por qué no me... 316 00:16:03,200 --> 00:16:05,700 ah, que no importa la clase, vale 317 00:16:05,700 --> 00:16:09,259 vale, y eso también lo puedo hacer 318 00:16:09,259 --> 00:16:11,860 ah, es una referencia de tipo animal 319 00:16:11,860 --> 00:16:14,280 pero perfectamente cabe en ella 320 00:16:14,280 --> 00:16:15,620 un objeto de tipo perro 321 00:16:15,620 --> 00:16:17,780 ningún problema, porque perro hereda de animal 322 00:16:17,780 --> 00:16:18,180 y eso también lo puedo hacer 323 00:16:18,200 --> 00:16:22,080 y también perfectamente 324 00:16:22,080 --> 00:16:26,680 podría caber en A 325 00:16:26,680 --> 00:16:30,340 podría caber en A 326 00:16:30,340 --> 00:16:31,500 una referencia 327 00:16:31,500 --> 00:16:33,560 un objeto 328 00:16:33,560 --> 00:16:41,800 de tipo pez 329 00:16:41,800 --> 00:16:48,180 bueno, pues esta es la principal referencia 330 00:16:48,200 --> 00:16:49,200 de la herencia 331 00:16:49,200 --> 00:16:52,080 que en una referencia de una clase 332 00:16:52,080 --> 00:16:55,460 pueden caber objetos de esa clase 333 00:16:55,460 --> 00:16:57,080 y de cualquiera de las subclases 334 00:16:57,080 --> 00:17:00,860 y eso nos facilita muchísimo la vida en las aplicaciones 335 00:17:00,860 --> 00:17:02,920 ya lo hemos visto en la del otro día 336 00:17:02,920 --> 00:17:03,680 en la de clientes 337 00:17:03,680 --> 00:17:05,319 yo tengo que trabajar con muchos clientes 338 00:17:05,319 --> 00:17:06,299 tengo que trabajar con muchos 339 00:17:06,299 --> 00:17:08,440 pues me hago un array único 340 00:17:08,440 --> 00:17:10,680 un array único de tipo cliente 341 00:17:10,680 --> 00:17:13,380 y en ese array meto en cada posición lo que me da la gana 342 00:17:13,380 --> 00:17:16,960 porque cada posición será una referencia de tipo cliente 343 00:17:16,960 --> 00:17:17,880 cada posición, aquí está 344 00:17:17,880 --> 00:17:19,740 a clientes de cero, de uno, de dos 345 00:17:19,740 --> 00:17:22,580 pues en cada posición meto el cliente que yo quiera 346 00:17:22,580 --> 00:17:24,460 y no hay ningún problema 347 00:17:24,460 --> 00:17:25,780 y ya está 348 00:17:25,780 --> 00:17:29,300 vale, entonces ahora 349 00:17:29,300 --> 00:17:32,300 me facilita ahí mucho las cosas 350 00:17:32,300 --> 00:17:33,480 yo cuando, por ejemplo 351 00:17:33,480 --> 00:17:36,240 imaginaos que ahora 352 00:17:36,240 --> 00:17:37,680 nosotros queremos hacer un método 353 00:17:37,680 --> 00:17:40,320 al cual se le pueden pasar 354 00:17:40,320 --> 00:17:42,520 animales en general 355 00:17:42,520 --> 00:17:43,900 tanto perros como gatos 356 00:17:43,900 --> 00:17:46,540 y ese método tiene que hacer cosas con esos animales 357 00:17:46,540 --> 00:17:47,120 vamos a 358 00:17:47,120 --> 00:17:48,660 vamos a imaginarnos 359 00:17:48,660 --> 00:17:50,180 vamos a hacernos una clase operaciones 360 00:17:50,180 --> 00:17:51,640 para hacer cosas con estos animales 361 00:17:51,640 --> 00:17:54,240 en otro paquete aparte 362 00:17:54,240 --> 00:17:56,060 vamos a hacer otro paquete aparte 363 00:17:56,060 --> 00:17:56,700 pues yo que sé 364 00:17:56,700 --> 00:17:58,140 lógica 365 00:17:58,140 --> 00:18:02,060 ah, que ya lo he llamado antes 366 00:18:04,560 --> 00:18:05,720 bueno, no merece la pena 367 00:18:05,720 --> 00:18:08,320 porque en este mismo paquete lógica 368 00:18:08,320 --> 00:18:10,360 vamos a hacernos una nueva clase 369 00:18:10,360 --> 00:18:11,060 operaciones 370 00:18:11,060 --> 00:18:14,680 para llamarla desde el main 371 00:18:14,680 --> 00:18:15,060 bueno 372 00:18:17,120 --> 00:18:19,560 vale, pues en esta clase de operaciones 373 00:18:19,560 --> 00:18:20,580 vamos a hacer un método 374 00:18:20,580 --> 00:18:23,060 al que le podamos pasar 375 00:18:23,060 --> 00:18:24,180 cualquier animal 376 00:18:24,180 --> 00:18:26,460 y te diga como se llama 377 00:18:26,460 --> 00:18:27,520 y te diga 378 00:18:27,520 --> 00:18:31,360 te diga la inicial del animal 379 00:18:31,360 --> 00:18:32,280 te devuelva la inicial 380 00:18:32,280 --> 00:18:34,580 para que no sea exactamente un get 381 00:18:34,580 --> 00:18:36,340 porque el get ya te devolvería como se llama 382 00:18:36,340 --> 00:18:38,600 te devuelva la inicial del nombre 383 00:18:38,600 --> 00:18:40,960 entonces, tú haces aquí un método y dices 384 00:18:40,960 --> 00:18:43,560 a ver, necesito un método para devolver la inicial de mi nombre 385 00:18:43,560 --> 00:18:45,680 pues venga, este método 386 00:18:45,680 --> 00:18:49,620 me va a devolver 387 00:18:49,620 --> 00:18:51,019 un char que es la inicial 388 00:18:51,019 --> 00:18:58,960 y aquí el problema que viene es 389 00:18:58,960 --> 00:19:01,420 este método que va a necesitar 390 00:19:01,420 --> 00:19:03,100 hombre, pues le puedes pasar un perro 391 00:19:03,100 --> 00:19:05,019 le puedes pasar un gato, le puedes pasar un pez 392 00:19:05,019 --> 00:19:05,980 le puedes pasar lo que sea 393 00:19:05,980 --> 00:19:08,420 entonces cuando uno declarara este método 394 00:19:08,420 --> 00:19:09,580 si no tuviera la herencia 395 00:19:09,580 --> 00:19:11,259 tendría que hacer 396 00:19:11,259 --> 00:19:13,340 devolver inicial perro 397 00:19:13,340 --> 00:19:15,660 y ponerle aquí, le paso un perro 398 00:19:15,660 --> 00:19:16,900 devolver inicial gato 399 00:19:16,900 --> 00:19:18,800 y aquí, le paso un gato 400 00:19:18,800 --> 00:19:20,880 devolver inicial pez 401 00:19:20,880 --> 00:19:22,200 y aquí, le paso un pez 402 00:19:22,200 --> 00:19:23,340 entonces si no tuviéramos herencia 403 00:19:23,340 --> 00:19:27,460 y tuviéramos una aplicación con muchos tipos de animales distintos 404 00:19:27,460 --> 00:19:29,320 tendríamos que hacer un método 405 00:19:29,320 --> 00:19:31,220 de devolver inicial para cada uno de ellos 406 00:19:31,220 --> 00:19:32,980 y a cada uno de ellos 407 00:19:32,980 --> 00:19:36,340 decirle que tipo de parámetro recibe 408 00:19:36,340 --> 00:19:39,540 vale, esta sería la versión 409 00:19:39,540 --> 00:19:41,140 cuando 410 00:19:41,140 --> 00:19:44,680 el método devuelve la inicial del perro 411 00:19:44,680 --> 00:19:45,640 pero la versión 412 00:19:45,640 --> 00:19:48,180 para cuando el método devuelve la inicial de un pez 413 00:19:48,180 --> 00:19:49,540 sería esto mismo pero con pez 414 00:19:49,540 --> 00:19:50,560 sería una locura 415 00:19:50,560 --> 00:19:52,780 entonces gracias a que 416 00:19:52,780 --> 00:19:55,100 pez, perro, gato, todos 417 00:19:55,100 --> 00:19:57,120 están bajo una super clase común 418 00:19:57,120 --> 00:19:59,580 ese método basta con que yo haga 419 00:19:59,580 --> 00:20:00,620 una única versión 420 00:20:00,620 --> 00:20:03,280 hago una única versión de este método y digo 421 00:20:03,280 --> 00:20:05,240 oye, pásame el animal que te dé la gana 422 00:20:05,240 --> 00:20:07,340 pásame el que quieras 423 00:20:07,340 --> 00:20:10,020 pásame el que quieras 424 00:20:10,020 --> 00:20:13,080 y ahora esto ya, jolín 425 00:20:13,080 --> 00:20:14,340 nos facilita la vida un montón 426 00:20:15,640 --> 00:20:16,900 porque este método dice 427 00:20:16,900 --> 00:20:18,840 tú pásame cualquier cosa que 428 00:20:18,840 --> 00:20:20,560 quepa en esta referencia 429 00:20:20,560 --> 00:20:22,300 cualquier cosa, yo ya trabajaré 430 00:20:22,300 --> 00:20:24,340 y en esa referencia que cabe 431 00:20:24,340 --> 00:20:25,900 caben objetos animal 432 00:20:25,900 --> 00:20:28,860 pero también caben objeto perro, también caben objeto gato 433 00:20:28,860 --> 00:20:30,060 cualquier cosa que herede 434 00:20:30,060 --> 00:20:32,700 es lo que hemos 435 00:20:32,700 --> 00:20:35,140 tratado de ejemplificar justo aquí 436 00:20:35,140 --> 00:20:36,580 que en esta referencia 437 00:20:36,580 --> 00:20:39,000 cabe cualquier cosa que herede 438 00:20:39,000 --> 00:20:41,060 de animal, cualquier cosa 439 00:20:41,060 --> 00:20:43,440 pues aquí vemos una ventaja enorme 440 00:20:43,440 --> 00:20:45,520 yo hago un único método 441 00:20:45,519 --> 00:20:48,240 y digo, va, pásame el tipo de animal que te dé la gana 442 00:20:48,240 --> 00:20:50,519 no tengo que hacer una declaración para cada uno 443 00:20:50,519 --> 00:20:51,480 no me hace falta 444 00:20:51,480 --> 00:20:54,940 pongo aquí, pásame cualquier cosa que quepa en la 445 00:20:54,940 --> 00:20:58,039 y ahora yo ya trabajo con ese objeto A 446 00:20:58,039 --> 00:21:00,000 ¿vale? ahora yo ya trabajo con ese objeto A 447 00:21:00,000 --> 00:21:01,500 es que si no, sería una locura 448 00:21:01,500 --> 00:21:03,680 sería una locura hacer una aplicación 449 00:21:03,680 --> 00:21:05,619 que tenga que contemplar por separado 450 00:21:05,619 --> 00:21:08,099 los diferentes tipos de clientes 451 00:21:08,099 --> 00:21:09,480 los diferentes tipos de alumnos 452 00:21:09,480 --> 00:21:10,519 los diferentes tipos de no sé qué 453 00:21:10,519 --> 00:21:12,180 sería una locura hacer una aplicación así 454 00:21:12,180 --> 00:21:14,400 y la herencia nos lo facilita 455 00:21:14,400 --> 00:21:15,500 lo que pasa es que si no, no se puede hacer nada 456 00:21:15,519 --> 00:21:16,460 lo que pasa es que entonces, claro 457 00:21:16,460 --> 00:21:17,599 tenemos que 458 00:21:17,599 --> 00:21:21,059 ahora ya saber manejarla 459 00:21:21,059 --> 00:21:23,039 porque claro, ahora este método dice 460 00:21:23,039 --> 00:21:26,019 vale, me has pasado un animal 461 00:21:26,019 --> 00:21:28,139 y ahora 462 00:21:28,139 --> 00:21:30,779 ¿qué problema tiene este método ahora? 463 00:21:32,119 --> 00:21:33,519 el primero que se os ocurre 464 00:21:34,259 --> 00:21:36,980 yo ahora estoy programando este método 465 00:21:36,980 --> 00:21:39,920 que es, tú recibes un animal 466 00:21:39,920 --> 00:21:42,940 y en este caso de volver a iniciar 467 00:21:42,940 --> 00:21:43,900 lo tendría fácil, ¿no? 468 00:21:45,519 --> 00:21:46,740 porque el nombre del animal 469 00:21:46,740 --> 00:21:48,180 está en la clase animal 470 00:21:48,180 --> 00:21:50,079 está aquí 471 00:21:50,079 --> 00:21:51,980 ¿verdad? 472 00:21:53,160 --> 00:21:54,460 la clase animal 473 00:21:54,460 --> 00:21:56,960 la propiedad nombre está aquí arriba 474 00:21:56,960 --> 00:21:59,359 entonces, en este caso de volver a iniciar 475 00:21:59,359 --> 00:22:00,259 sería 476 00:22:00,259 --> 00:22:12,559 return A.getNombre.charad0 477 00:22:12,559 --> 00:22:13,259 ¿verdad? 478 00:22:13,259 --> 00:22:15,359 este método 479 00:22:15,360 --> 00:22:16,040 sería así 480 00:22:16,040 --> 00:22:18,140 entonces, yo ahora llamo a este método 481 00:22:18,140 --> 00:22:20,440 pasándole perro, gato, lo que me dé la gana 482 00:22:20,440 --> 00:22:21,980 ¿verdad? 483 00:22:22,040 --> 00:22:23,240 vamos a verlo 484 00:22:23,240 --> 00:22:26,500 imaginaos que 485 00:22:26,500 --> 00:22:28,480 me voy a hacer dos referencias 486 00:22:28,480 --> 00:22:29,780 A1 y A2 487 00:22:29,780 --> 00:22:32,900 en la referencia A1 488 00:22:32,900 --> 00:22:34,800 voy a meter 489 00:22:34,800 --> 00:22:37,900 un perro 490 00:22:37,900 --> 00:22:39,800 y en la referencia A2 491 00:22:39,800 --> 00:22:41,680 voy a meter un pez 492 00:22:41,680 --> 00:22:43,000 ¿vale? 493 00:22:43,000 --> 00:22:44,660 tengo dos objetos animal 494 00:22:44,660 --> 00:22:45,000 ¿vale? 495 00:22:45,360 --> 00:22:45,860 el A1 496 00:22:45,860 --> 00:22:47,080 y el A2 497 00:22:47,080 --> 00:22:47,760 A1 y A2 498 00:22:47,760 --> 00:22:49,400 como veis están declarados los dos de clase animal 499 00:22:49,400 --> 00:22:50,020 ¿vale? 500 00:22:51,540 --> 00:22:53,360 bueno, pues entonces yo ahora puedo llamar 501 00:22:53,360 --> 00:22:54,560 tranquilamente al método 502 00:22:54,560 --> 00:22:56,180 con cualquiera de los dos objetos 503 00:22:56,180 --> 00:23:00,140 devolver inicial 504 00:23:00,140 --> 00:23:01,720 y le paso A1 505 00:23:01,720 --> 00:23:03,880 y estupendo 506 00:23:03,880 --> 00:23:06,220 al compilador le parece genial 507 00:23:06,220 --> 00:23:08,460 yo no le he pasado un animal 508 00:23:08,460 --> 00:23:09,260 en realidad 509 00:23:09,260 --> 00:23:09,860 o sea, aquí 510 00:23:09,860 --> 00:23:13,480 operaciones dice que necesito un objeto de clase animal 511 00:23:13,480 --> 00:23:15,280 eso es lo que dice 512 00:23:15,280 --> 00:23:15,320 el método de clase animal 513 00:23:15,320 --> 00:23:15,340 ¿vale? 514 00:23:15,360 --> 00:23:16,400 es la declaración del método 515 00:23:16,400 --> 00:23:17,800 que necesita un objeto de clase animal 516 00:23:17,800 --> 00:23:20,560 y yo en realidad le estoy pasando 517 00:23:20,560 --> 00:23:23,360 uno que es un perro 518 00:23:23,360 --> 00:23:25,260 pero no pasa nada 519 00:23:25,260 --> 00:23:26,540 porque perro heredado de animal 520 00:23:26,540 --> 00:23:28,720 luego estupendo, ahí cabe perfectamente 521 00:23:28,720 --> 00:23:31,100 cuando le pase el pez 522 00:23:31,100 --> 00:23:32,380 pues exactamente igual 523 00:23:32,380 --> 00:23:37,960 cuando le pase el pez 524 00:23:37,960 --> 00:23:38,820 pues lo mismo 525 00:23:38,820 --> 00:23:41,120 le puedo pasar un pez, no pasa nada 526 00:23:41,120 --> 00:23:42,680 cae 527 00:23:42,680 --> 00:23:45,340 cae en la caja de animal perfectamente 528 00:23:45,360 --> 00:23:46,760 porque A2 es un pez 529 00:23:46,760 --> 00:23:47,500 que pez hereda 530 00:23:47,500 --> 00:23:49,360 si no hubiera un extens 531 00:23:49,360 --> 00:23:50,860 pues sería imposible hacer todo esto 532 00:23:50,860 --> 00:23:51,140 claro 533 00:23:51,140 --> 00:23:52,980 ¿vale? 534 00:23:53,840 --> 00:23:55,640 bueno, lógicamente si yo ejecutara esto 535 00:23:55,640 --> 00:23:57,080 como no lo he mostrado en un este 536 00:23:57,080 --> 00:23:58,000 pues no va a salir nada 537 00:24:13,620 --> 00:24:14,140 vale 538 00:24:14,140 --> 00:24:14,360 vale 539 00:24:14,360 --> 00:24:15,320 en este caso nos sale 540 00:24:15,319 --> 00:24:17,179 saldrá P en ambas, vamos a llamarle a este 541 00:24:17,179 --> 00:24:17,779 de otra manera 542 00:24:17,779 --> 00:24:19,679 al P 543 00:24:19,679 --> 00:24:27,460 vale, y todo fenomenal, me sale P y X 544 00:24:27,460 --> 00:24:29,659 que efectivamente son las dos iniciales 545 00:24:29,659 --> 00:24:30,960 P y X, vale 546 00:24:30,960 --> 00:24:32,879 hasta aquí está claro, ¿no? 547 00:24:33,019 --> 00:24:35,299 todo nos encaja, todo estupendo, no vemos ninguna 548 00:24:35,299 --> 00:24:37,319 cosa rara, y ya vemos 549 00:24:37,319 --> 00:24:38,139 la primera 550 00:24:38,139 --> 00:24:40,960 de las fortalezas de la herencia 551 00:24:40,960 --> 00:24:43,139 que no hemos tenido que hacer métodos 552 00:24:43,139 --> 00:24:45,079 diferentes para devolver inicial 553 00:24:45,079 --> 00:24:46,319 para cada uno, no 554 00:24:46,319 --> 00:24:48,819 el mismo yo le paso al animal, vale 555 00:24:48,819 --> 00:24:51,039 hasta ahí vamos bien, bueno 556 00:24:51,039 --> 00:24:53,059 vale, vamos a imaginar 557 00:24:53,059 --> 00:24:54,740 que ahora lo que quiere hacer este método 558 00:24:54,740 --> 00:24:56,859 en realidad 559 00:24:56,859 --> 00:25:00,899 depende del animal que sea 560 00:25:00,899 --> 00:25:02,220 me explico, por ejemplo 561 00:25:02,220 --> 00:25:04,339 vamos a suponer que 562 00:25:04,339 --> 00:25:06,240 tenemos 563 00:25:06,240 --> 00:25:09,199 el perro, tiene un 564 00:25:09,199 --> 00:25:10,879 método en particular 565 00:25:10,879 --> 00:25:11,859 que fuera 566 00:25:11,859 --> 00:25:13,759 pues ladrar 567 00:25:13,759 --> 00:25:28,180 ya está 568 00:25:28,180 --> 00:25:32,160 y el pez 569 00:25:32,160 --> 00:25:34,759 tiene un método suyo 570 00:25:34,759 --> 00:25:36,420 que es por lo que hacen los peces 571 00:25:36,420 --> 00:25:39,000 que no sé lo que hacen los peces 572 00:25:39,000 --> 00:25:40,980 algo harán 573 00:25:40,980 --> 00:25:41,460 digo yo 574 00:25:41,460 --> 00:25:41,920 nada 575 00:25:41,920 --> 00:25:42,920 y el pez 576 00:25:42,920 --> 00:25:43,740 tiene un método suyo que es por lo que hacen los peces 577 00:25:43,759 --> 00:25:48,019 pues el pez 578 00:25:48,019 --> 00:25:48,420 nada 579 00:25:48,420 --> 00:25:49,640 que el perro, no nada 580 00:25:49,640 --> 00:25:50,619 vale 581 00:25:50,619 --> 00:25:56,379 entonces la acción del perro 582 00:25:56,379 --> 00:25:58,339 es ladrar y la acción del pez 583 00:25:58,339 --> 00:25:59,299 es nadar 584 00:25:59,299 --> 00:26:00,400 vale 585 00:26:00,400 --> 00:26:10,019 vale, entonces estos métodos lógicamente 586 00:26:10,019 --> 00:26:11,940 no caen en animal, no tendría 587 00:26:11,940 --> 00:26:13,740 ningún sentido que cayeran en animal 588 00:26:13,759 --> 00:26:15,759 no tendría ningún sentido 589 00:26:15,759 --> 00:26:17,759 porque no todos los animales ladran 590 00:26:17,759 --> 00:26:19,759 y no todos los animales 591 00:26:19,759 --> 00:26:21,759 eh, nadan 592 00:26:21,759 --> 00:26:23,759 entonces, esos métodos sí que están 593 00:26:23,759 --> 00:26:25,759 solamente en cada clase 594 00:26:25,759 --> 00:26:27,759 sin embargo, sí puede haber algo 595 00:26:27,759 --> 00:26:29,759 que sólo haga un animal 596 00:26:29,759 --> 00:26:31,759 perdón, que hagan todos los animales 597 00:26:31,759 --> 00:26:33,759 pues todos los animales comen 598 00:26:33,759 --> 00:26:35,759 eso sí que lo hacen todos 599 00:26:35,759 --> 00:26:37,759 entonces, en la clase animal sí podría haber un método 600 00:26:43,759 --> 00:26:48,240 en esta clase animal 601 00:26:48,240 --> 00:26:49,859 sí podría, tendría sentido 602 00:26:49,859 --> 00:26:50,619 haber un método 603 00:26:50,619 --> 00:26:57,460 que fuera a comer 604 00:26:57,460 --> 00:26:58,660 porque todos comen 605 00:26:58,660 --> 00:27:00,220 entonces lo pongo ahí 606 00:27:00,220 --> 00:27:02,539 y ya todos los animales 607 00:27:02,539 --> 00:27:04,900 tienen ese método 608 00:27:04,900 --> 00:27:06,819 aunque yo no lo escriba específicamente 609 00:27:06,819 --> 00:27:09,579 pero como ladrar es sólo de perro, ese va en perro 610 00:27:09,579 --> 00:27:12,460 como nadar es sólo de pez, ese va en pez 611 00:27:12,460 --> 00:27:12,779 vale 612 00:27:12,779 --> 00:27:13,740 hasta que el perro sea un perro 613 00:27:13,759 --> 00:27:14,759 está que bien, ¿no? 614 00:27:14,759 --> 00:27:16,759 esto como diseño pues tendría sentido 615 00:27:16,759 --> 00:27:19,759 yo meto en la superclase lo que hacen todos 616 00:27:19,759 --> 00:27:22,759 y en las subclases lo que es específico de cada uno 617 00:27:22,759 --> 00:27:23,759 está ahí bien 618 00:27:23,759 --> 00:27:27,759 vale, pues nos volvemos a nuestra clase de métodos 619 00:27:27,759 --> 00:27:29,759 imaginaos que ahora hay 620 00:27:29,759 --> 00:27:31,759 que yo quiero hacer en esta aplicación 621 00:27:31,759 --> 00:27:33,759 quiero hacer un método 622 00:27:33,759 --> 00:27:35,759 que ejerza o que realice 623 00:27:35,759 --> 00:27:39,759 la acción propia de cada animal 624 00:27:39,759 --> 00:27:41,759 la acción propia del perro puede ser ladrar 625 00:27:41,759 --> 00:27:43,759 la acción propia del pez, nadar 626 00:27:43,759 --> 00:27:45,759 la acción propia del gato, maullar 627 00:27:45,759 --> 00:27:47,759 hay algo que en mi modelo de datos significa 628 00:27:47,759 --> 00:27:49,759 su acción natural 629 00:27:49,759 --> 00:27:52,759 entonces, ¿cómo expreso yo eso? 630 00:27:52,759 --> 00:27:53,759 pues podría poner 631 00:27:53,759 --> 00:27:56,759 vale, pues mira, me hago un método que sea 632 00:27:56,759 --> 00:27:58,759 public static 633 00:27:58,759 --> 00:28:00,759 realizar su acción, la que sea 634 00:28:00,759 --> 00:28:02,759 nadar, lo que sea 635 00:28:06,759 --> 00:28:08,759 y ahora, ¿quién va a realizar esa acción? 636 00:28:08,759 --> 00:28:10,759 cualquier animal 637 00:28:10,759 --> 00:28:12,759 cuando yo llame a realizar acción para un perro 638 00:28:12,759 --> 00:28:13,759 pues la realizará un perro 639 00:28:13,759 --> 00:28:15,759 todos tienen su acción 640 00:28:15,759 --> 00:28:17,759 ladrar, maullar 641 00:28:17,759 --> 00:28:20,759 entonces, tendría sentido que yo me hiciera aquí un método 642 00:28:22,759 --> 00:28:24,759 y dijera, venga, pásame un animal 643 00:28:26,759 --> 00:28:28,759 pásame un animal 644 00:28:28,759 --> 00:28:30,759 vamos a ver 645 00:28:31,759 --> 00:28:33,759 cualquier animal 646 00:28:33,759 --> 00:28:35,759 esta es la misma idea que el de arriba 647 00:28:35,759 --> 00:28:36,759 cualquier animal puede hacer este método 648 00:28:36,759 --> 00:28:38,759 pásame cualquier animal 649 00:28:38,759 --> 00:28:41,759 y yo aquí ya me encargo de que realice su acción 650 00:28:41,759 --> 00:28:43,759 sea ladrar, sea no sé qué 651 00:28:43,759 --> 00:28:45,759 bueno, pues estupendo 652 00:28:45,759 --> 00:28:46,759 sería esa la idea 653 00:28:46,759 --> 00:28:49,759 y así no tengo que hacer un método para cada 654 00:28:49,759 --> 00:28:51,759 ladrar perro, al que le paso un perro 655 00:28:51,759 --> 00:28:53,759 maullar gato, al que le paso un gato 656 00:28:53,759 --> 00:28:55,759 nadar pez, al que le paso un pez 657 00:28:55,759 --> 00:28:57,759 ¿para qué voy a hacer un método 658 00:28:57,759 --> 00:28:59,759 para cada animal 659 00:28:59,759 --> 00:29:01,759 para que realice su acción? 660 00:29:01,759 --> 00:29:03,759 si con esto de la herencia hemos visto 661 00:29:03,759 --> 00:29:07,759 que yo en esta referencia cae cualquier animal 662 00:29:07,759 --> 00:29:09,759 pues me hago un único método, realiza la acción 663 00:29:09,759 --> 00:29:11,759 y que realice la acción que sea 664 00:29:11,759 --> 00:29:13,759 ya dependerá de este animal cual sea 665 00:29:13,759 --> 00:29:15,759 bueno, puede tener sentido 666 00:29:15,759 --> 00:29:17,759 de hecho era la idea 667 00:29:17,759 --> 00:29:19,759 ahorrarnos tener un método para cada uno 668 00:29:19,759 --> 00:29:21,759 pero ¿qué nos pasa? 669 00:29:21,759 --> 00:29:23,759 que nos ponemos aquí a realizar la acción 670 00:29:23,759 --> 00:29:25,759 y nos volvemos locos 671 00:29:25,759 --> 00:29:27,759 porque A, la referencia 672 00:29:27,759 --> 00:29:29,759 oye, el método este me dice 673 00:29:29,759 --> 00:29:31,759 a ver, A 674 00:29:31,759 --> 00:29:33,759 yo sé que es un animal 675 00:29:33,759 --> 00:29:35,759 pero no sé más 676 00:29:35,759 --> 00:29:37,759 no sé más 677 00:29:37,759 --> 00:29:39,759 entonces si yo veo, atiendo 678 00:29:39,759 --> 00:29:41,759 a los métodos de A 679 00:29:41,759 --> 00:29:43,759 a los métodos de A 680 00:29:43,759 --> 00:29:45,759 a los métodos de A 681 00:29:47,759 --> 00:29:49,759 si yo atiendo a los métodos de A 682 00:29:49,759 --> 00:29:51,759 si yo atiendo a los métodos de A 683 00:29:51,759 --> 00:29:53,759 pues es que sólo veo lo que tiene 684 00:29:53,759 --> 00:29:55,759 la clase animal 685 00:29:55,759 --> 00:29:57,759 sólo veo lo que tiene la clase animal 686 00:29:57,759 --> 00:29:59,759 tiene nombres, tiene comer 687 00:29:59,759 --> 00:30:01,759 porque todos comen 688 00:30:01,759 --> 00:30:03,759 pero yo solamente puedo llamar a lo que haya en A 689 00:30:03,759 --> 00:30:05,759 no puedo llamar a la específica 690 00:30:05,759 --> 00:30:07,759 no puedo llamarlo 691 00:30:07,759 --> 00:30:09,759 entonces aquí nos encontramos 692 00:30:09,759 --> 00:30:11,759 con un problema gordo a la hora de hacer este método 693 00:30:11,759 --> 00:30:13,759 ¿verdad? 694 00:30:13,759 --> 00:30:15,759 ¿qué decimos, jolines? 695 00:30:15,759 --> 00:30:17,759 es que depende 696 00:30:17,759 --> 00:30:19,759 ¿qué hago? ¿a punto ladrar? 697 00:30:19,759 --> 00:30:21,759 no puedo, porque ladrar es un método 698 00:30:21,759 --> 00:30:23,759 que está en perro, no está en animal, no puedo 699 00:30:23,759 --> 00:30:25,759 ¿hago a punto nadar? 700 00:30:25,759 --> 00:30:27,759 no puedo 701 00:30:27,759 --> 00:30:29,759 es que no existen, no existen esos métodos 702 00:30:29,759 --> 00:30:31,759 aquí, pero entonces 703 00:30:31,759 --> 00:30:33,759 diríamos, jolín, esto no tiene sentido 704 00:30:33,759 --> 00:30:35,759 entonces, ¿para qué te vale esto? 705 00:30:35,759 --> 00:30:37,759 aquí te ha valido muy bien 706 00:30:37,759 --> 00:30:39,759 porque nombre está en todos los animales 707 00:30:39,759 --> 00:30:41,759 pero cuando 708 00:30:41,759 --> 00:30:43,759 quieres tú invocar 709 00:30:43,759 --> 00:30:45,759 a cosas específicas de cada objeto 710 00:30:45,759 --> 00:30:47,759 pues no te vale este invento 711 00:30:47,759 --> 00:30:49,759 no te vale, sólo puedes invocar 712 00:30:49,759 --> 00:30:51,759 a lo que está en animal 713 00:30:51,759 --> 00:30:53,759 ¿no? 714 00:30:53,759 --> 00:30:55,759 ¿entendéis el problema, no? 715 00:30:55,759 --> 00:30:57,759 bueno, pues tiene que haber 716 00:30:57,759 --> 00:30:59,759 alguna manera para que esto no se desmorone 717 00:30:59,759 --> 00:31:01,759 digamos, jolín, pues hemos empezado a hacer algo 718 00:31:01,759 --> 00:31:03,759 que luego resulta que la potencia que tienes es muy limitada 719 00:31:03,759 --> 00:31:05,759 tiene que haber algo 720 00:31:05,759 --> 00:31:07,759 que nos permita distinguir 721 00:31:07,759 --> 00:31:09,759 dada una referencia 722 00:31:09,759 --> 00:31:11,759 de una superclase 723 00:31:11,759 --> 00:31:13,759 que nos permita distinguir 724 00:31:13,759 --> 00:31:15,759 si el objeto se instanció 725 00:31:15,759 --> 00:31:17,759 como perro, o se instanció como gato 726 00:31:17,759 --> 00:31:19,759 o se instanció como pez 727 00:31:19,759 --> 00:31:21,759 porque eso es lo que nos falta aquí 728 00:31:21,759 --> 00:31:23,759 lo que necesitamos aquí saber 729 00:31:23,759 --> 00:31:25,759 es esto 730 00:31:25,759 --> 00:31:27,759 esto es lo que necesitaríamos saber 731 00:31:29,759 --> 00:31:31,759 ¿qué tipo de objeto 732 00:31:31,759 --> 00:31:33,759 es A? 733 00:31:33,759 --> 00:31:35,759 o lo que es lo mismo, sabemos que es 734 00:31:35,759 --> 00:31:37,759 pertenece a animal, o sea, está declarado 735 00:31:37,759 --> 00:31:39,759 como animal, con lo cual sabemos 736 00:31:39,759 --> 00:31:41,759 que es o de clase animal 737 00:31:41,759 --> 00:31:43,759 o de cualquiera de las superclases 738 00:31:43,759 --> 00:31:45,759 eso sí que lo sabemos sí o sí 739 00:31:45,759 --> 00:31:47,759 que A o es de animal, o es de cualquiera de las subclases 740 00:31:47,759 --> 00:31:49,759 ahí no hay otra, tiene que serlo 741 00:31:49,759 --> 00:31:51,759 porque una referencia A 742 00:31:51,759 --> 00:31:53,759 cae en la propia clase animal 743 00:31:53,759 --> 00:31:55,759 y todas las subclases, eso lo sabemos 744 00:31:55,759 --> 00:31:57,759 pero claro, tenemos que saber cuál de todas esas 745 00:31:59,759 --> 00:32:01,759 esa es nuestra gran duda 746 00:32:03,759 --> 00:32:05,759 ¿a qué subclase pertenece? 747 00:32:05,759 --> 00:32:09,759 porque si no lo sabemos 748 00:32:09,759 --> 00:32:11,759 si no podemos averiguarlo 749 00:32:11,759 --> 00:32:13,759 no podemos decidir 750 00:32:13,759 --> 00:32:15,759 a qué método llamar, si llamar a ladrar 751 00:32:15,759 --> 00:32:17,759 llamar a nadar, no podemos saberlo 752 00:32:17,759 --> 00:32:19,759 esta pregunta hay que poder responderla 753 00:32:19,759 --> 00:32:21,759 Java nos tiene que dar una manera 754 00:32:21,759 --> 00:32:23,759 de poder responder a esta pregunta 755 00:32:23,759 --> 00:32:25,759 yo sé que A es una referencia 756 00:32:25,759 --> 00:32:27,759 de animal, pero en el momento de crear 757 00:32:27,759 --> 00:32:29,759 en el momento de hacer el new 758 00:32:29,759 --> 00:32:31,759 cuando hiciste el new, ¿qué new hiciste? 759 00:32:31,759 --> 00:32:33,759 hiciste new perro, hiciste new gato 760 00:32:33,759 --> 00:32:35,759 me lo tienes que decir, tengo que encontrar 761 00:32:35,759 --> 00:32:37,759 una manera de resolver eso 762 00:32:37,759 --> 00:32:39,759 porque si no, no sé si ladrar a perro 763 00:32:39,759 --> 00:32:41,759 llamar a ladrar, llamar a nadar, etc 764 00:32:41,759 --> 00:32:43,759 bueno, pues efectivamente 765 00:32:43,759 --> 00:32:45,759 hay una sentencia 766 00:32:45,759 --> 00:32:47,759 para resolver esa pregunta 767 00:32:47,759 --> 00:32:49,759 porque si no, esto no vale para nada 768 00:32:49,759 --> 00:32:51,759 vale, pues ¿qué sentencia es? 769 00:32:53,759 --> 00:32:55,759 es esto 770 00:32:55,759 --> 00:32:57,759 que se usa así 771 00:32:59,759 --> 00:33:01,759 es como un operador 772 00:33:01,759 --> 00:33:03,759 condicional 773 00:33:03,759 --> 00:33:05,759 y se usa así 774 00:33:05,759 --> 00:33:09,759 por ejemplo 775 00:33:09,759 --> 00:33:11,759 esta sería la condición 776 00:33:11,759 --> 00:33:13,759 habría que meterla en un if 777 00:33:13,759 --> 00:33:15,759 o en un while donde fuera 778 00:33:15,759 --> 00:33:17,759 porque es una condición, es un operador condicional 779 00:33:17,759 --> 00:33:19,759 esta sería la condición 780 00:33:19,759 --> 00:33:21,759 si A se instanció 781 00:33:21,759 --> 00:33:23,759 como objeto perro 782 00:33:23,759 --> 00:33:25,759 esto será true 783 00:33:25,759 --> 00:33:27,759 si A 784 00:33:27,759 --> 00:33:29,759 el objeto que tiene dentro se instanció 785 00:33:29,759 --> 00:33:31,759 con el new como perro, dará true 786 00:33:31,759 --> 00:33:33,759 si se instanció como perro 787 00:33:33,759 --> 00:33:35,759 pues esto dará true 788 00:33:35,759 --> 00:33:37,759 si A se instanció con el new como gato 789 00:33:37,759 --> 00:33:39,759 sabemos que se puede instanciar de cualquier cosa 790 00:33:39,759 --> 00:33:41,759 que sea subclase de animal, de cualquiera 791 00:33:41,759 --> 00:33:43,759 pues con esta condición 792 00:33:43,759 --> 00:33:45,759 podemos averiguarlo 793 00:33:45,759 --> 00:33:47,759 entonces 794 00:33:47,759 --> 00:33:49,759 uno podría decir, ah vale, por fin resuelto 795 00:33:49,759 --> 00:33:51,759 si A es un objeto 796 00:33:51,759 --> 00:33:53,759 que se instanció como perro 797 00:33:55,759 --> 00:33:57,759 tendré que hacer el import 798 00:33:57,759 --> 00:33:59,759 si se instanció como perro 799 00:33:59,759 --> 00:34:01,759 si se instanció como perro 800 00:34:01,759 --> 00:34:03,759 pues entonces 801 00:34:03,759 --> 00:34:05,759 ahora yo ya 802 00:34:05,759 --> 00:34:07,759 puedo partir de la base 803 00:34:07,759 --> 00:34:09,760 de que A es un perro 804 00:34:09,760 --> 00:34:11,760 y hacer todo lo necesario 805 00:34:11,760 --> 00:34:13,760 para poder llamar a su método ladrar 806 00:34:13,760 --> 00:34:15,760 entonces 807 00:34:15,760 --> 00:34:17,760 todo lo necesario es esto, a punto ladrar 808 00:34:21,760 --> 00:34:23,760 no me corrijas 809 00:34:23,760 --> 00:34:25,760 compilador, así 810 00:34:25,760 --> 00:34:27,760 todo lo necesario es esto 811 00:34:27,760 --> 00:34:29,760 nos vamos 812 00:34:29,760 --> 00:34:31,760 no, estamos en las mismas 813 00:34:31,760 --> 00:34:33,760 que el compilador, el compilador no entiende 814 00:34:33,760 --> 00:34:35,760 de tiempo de ejecución 815 00:34:35,760 --> 00:34:37,760 de cómo son las cosas 816 00:34:37,760 --> 00:34:39,760 el compilador entiende sólo de cómo se han declarado 817 00:34:39,760 --> 00:34:41,760 y el compilador se emperra y dice 818 00:34:41,760 --> 00:34:43,760 que no, que no llames a ladrar 819 00:34:43,760 --> 00:34:45,760 que A está declarado 820 00:34:45,760 --> 00:34:47,760 como animal, pues yo solamente 821 00:34:47,760 --> 00:34:49,760 te dejo llamar a métodos 822 00:34:49,760 --> 00:34:51,760 que estén animal 823 00:34:51,760 --> 00:34:53,760 pero claro, tú sabes 824 00:34:53,760 --> 00:34:55,760 porque te lo está diciendo 825 00:34:55,760 --> 00:34:57,760 esta condición, tú sabes 826 00:34:57,760 --> 00:34:59,760 que A sí que se instanció como perro 827 00:34:59,760 --> 00:35:01,760 lo sabes porque esto es true 828 00:35:01,760 --> 00:35:03,760 entonces como lo sabes 829 00:35:03,760 --> 00:35:05,760 te puedes permitir 830 00:35:05,760 --> 00:35:07,760 y aquí sí que lo tienes que hacer 831 00:35:07,760 --> 00:35:09,760 te puedes permitir hacer un casting 832 00:35:09,760 --> 00:35:11,760 aquí sí que es lo que el eclipse 833 00:35:11,760 --> 00:35:13,760 se ha empeñado en hacérmelo rápidamente 834 00:35:13,760 --> 00:35:15,760 aquí sí que te puedes 835 00:35:15,760 --> 00:35:17,760 permitir hacer un casting 836 00:35:17,760 --> 00:35:19,760 oye, yo sé que A es un perro 837 00:35:19,760 --> 00:35:21,760 y que haciendo este casting no la cago 838 00:35:21,760 --> 00:35:23,760 porque sé que lo es 839 00:35:23,760 --> 00:35:25,760 sé que lo es 840 00:35:25,760 --> 00:35:27,760 porque si no, no habría dado true esto 841 00:35:27,760 --> 00:35:29,760 entonces como sé que lo es 842 00:35:29,760 --> 00:35:31,760 me hago 843 00:35:31,760 --> 00:35:33,760 el casting a perro 844 00:35:33,760 --> 00:35:35,760 ala, casting a perro 845 00:35:35,760 --> 00:35:37,760 y no va a fallar 846 00:35:37,760 --> 00:35:39,760 y ahora ya esto, después del casting 847 00:35:39,760 --> 00:35:41,760 al ser ya un objeto perro 848 00:35:41,760 --> 00:35:43,760 el compilador dice, vale 849 00:35:43,760 --> 00:35:45,760 estupendo, ya sí que te dejo llamar a ladrar 850 00:35:45,760 --> 00:35:47,760 ya sí que te dejo llamar a ladrar 851 00:35:47,760 --> 00:35:49,760 vale 852 00:35:49,760 --> 00:35:51,760 bueno, vamos a pararlo aquí 853 00:35:57,760 --> 00:35:59,760 bueno, vamos a pararlo aquí 854 00:35:59,760 --> 00:36:01,760 vale