1 00:00:00,000 --> 00:00:03,620 vale, pues venga, entonces yo hasta ahora 2 00:00:03,620 --> 00:00:05,860 para que no me salgan errores raros 3 00:00:05,860 --> 00:00:07,640 y no tener que explicar 4 00:00:07,640 --> 00:00:09,540 por qué me salían, pues yo veréis 5 00:00:09,540 --> 00:00:11,080 que he dejado ahí 6 00:00:11,080 --> 00:00:13,640 disimulando, a ver si no habéis dado cuenta 7 00:00:13,640 --> 00:00:15,800 que he dejado la propiedad sin ponerle 8 00:00:15,800 --> 00:00:17,920 el privado, deja la propiedad ahí suelta 9 00:00:17,920 --> 00:00:19,600 y ya está, vale, luego he puesto los get 10 00:00:19,600 --> 00:00:21,100 y los set con public como todos 11 00:00:21,100 --> 00:00:23,080 vale, pero nosotros normalmente 12 00:00:23,080 --> 00:00:25,780 hemos dicho que cuando programamos 13 00:00:25,780 --> 00:00:28,039 entidades, las propiedades 14 00:00:28,039 --> 00:00:29,960 privado y damos acceso 15 00:00:29,960 --> 00:00:31,880 a ellas a través de los get 16 00:00:31,880 --> 00:00:33,840 y los set, vale, damos acceso a ellas a través 17 00:00:33,840 --> 00:00:35,899 de los get y los set, vale, bueno 18 00:00:35,899 --> 00:00:36,799 pues vamos a hacerlo así 19 00:00:36,799 --> 00:00:39,840 vale 20 00:00:39,840 --> 00:00:44,340 bueno 21 00:00:44,340 --> 00:00:47,760 entonces el objeto animal 22 00:00:47,760 --> 00:00:49,240 tiene ya su propiedad 23 00:00:49,240 --> 00:00:52,040 sus constructores que no se van 24 00:00:52,040 --> 00:00:52,540 a heredar 25 00:00:52,540 --> 00:00:54,820 silencio 26 00:00:54,820 --> 00:00:58,760 así mejor 27 00:00:58,760 --> 00:00:59,939 vale 28 00:00:59,960 --> 00:01:00,859 , sus constructores 29 00:01:00,859 --> 00:01:03,740 coño, me levanto, calláis, me siento, habláis 30 00:01:03,740 --> 00:01:06,840 silencio 31 00:01:07,400 --> 00:01:15,620 jolines 32 00:01:15,620 --> 00:01:18,680 me estás poniendo, no sé si eres Edison o no 33 00:01:18,680 --> 00:01:20,480 el que habla, pero me da igual, el Edison genérico 34 00:01:20,480 --> 00:01:21,180 que se calle 35 00:01:21,180 --> 00:01:23,439 vale 36 00:01:23,439 --> 00:01:28,560 a ver, yo aquí tengo mis constructores 37 00:01:28,560 --> 00:01:29,480 de toda la vida 38 00:01:29,480 --> 00:01:30,719 bueno, solo he hecho uno 39 00:01:30,719 --> 00:01:33,920 con lo cual no tengo el constructor sin parámetros 40 00:01:33,920 --> 00:01:35,620 vale 41 00:01:35,620 --> 00:01:38,780 los get y los set para acceder 42 00:01:38,780 --> 00:01:40,159 bueno, solo uno, get y set 43 00:01:40,159 --> 00:01:41,960 y estos métodos 44 00:01:41,960 --> 00:01:44,400 este que se hereda, bueno, y este en particular 45 00:01:44,400 --> 00:01:46,260 que es el abstracto 46 00:01:46,260 --> 00:01:48,260 venga, pues nada, esta clase la vamos a dejar así 47 00:01:48,260 --> 00:01:49,840 y ahora ya 48 00:01:49,840 --> 00:01:52,280 tenemos perro, vale 49 00:01:52,280 --> 00:01:56,500 que de nuevo vamos a 50 00:01:56,500 --> 00:01:58,260 ponerle 51 00:01:59,480 --> 00:02:01,719 voy a quitar el constructor 52 00:02:01,719 --> 00:02:04,939 porque yo lo he puesto así alegremente 53 00:02:04,939 --> 00:02:06,900 como no me metía en ellos 54 00:02:06,900 --> 00:02:08,560 lo he puesto alegremente para que no me dé errores 55 00:02:08,560 --> 00:02:09,060 y ya está 56 00:02:09,060 --> 00:02:11,740 vale, pongo su propiedad privada 57 00:02:11,740 --> 00:02:13,560 como siempre, sus get y set 58 00:02:13,560 --> 00:02:15,000 y luego además 59 00:02:15,000 --> 00:02:17,780 y luego además he puesto los métodos 60 00:02:17,780 --> 00:02:20,020 este que sobrescribía obligatoriamente 61 00:02:20,020 --> 00:02:20,620 el de arriba 62 00:02:20,620 --> 00:02:23,039 este lo tenía que sobrescribir sí o sí 63 00:02:23,039 --> 00:02:25,020 vale 64 00:02:25,020 --> 00:02:27,000 y no he hecho constructores todavía 65 00:02:27,000 --> 00:02:29,460 vale, bueno, pues venga, vamos a verlo 66 00:02:29,479 --> 00:02:30,879 vamos a hacerle un constructor 67 00:02:30,879 --> 00:02:33,459 el constructor de toda la vida 68 00:02:33,459 --> 00:02:35,799 si queremos que inicialice 69 00:02:35,799 --> 00:02:37,340 las dos propiedades que tiene 70 00:02:37,340 --> 00:02:39,819 que son raza y la que yo no veo 71 00:02:39,819 --> 00:02:41,039 pero que está ahí, que es nombre 72 00:02:41,039 --> 00:02:44,000 si quiero que inicialice las dos propiedades 73 00:02:44,000 --> 00:02:45,679 pues el constructor 74 00:02:45,679 --> 00:02:46,859 que inicializa las dos 75 00:02:46,859 --> 00:02:49,500 pues es un constructor que funciona así, ¿verdad? 76 00:02:52,539 --> 00:02:53,620 yo le paso 77 00:02:53,620 --> 00:02:56,019 para el nombre un parámetro 78 00:02:56,019 --> 00:02:57,739 porque sé que tiene una propiedad nombre 79 00:02:57,739 --> 00:02:59,120 aunque yo no la vea físicamente 80 00:02:59,479 --> 00:03:03,459 y para la raza le paso otro parámetro 81 00:03:03,459 --> 00:03:04,979 como he hecho toda la vida 82 00:03:04,979 --> 00:03:06,340 y ahora 83 00:03:06,340 --> 00:03:09,439 ¿cómo usamos estos parámetros que yo paso? 84 00:03:09,439 --> 00:03:11,799 pues el uso habitual es usarlos 85 00:03:11,799 --> 00:03:13,159 para inicializar 86 00:03:13,159 --> 00:03:15,439 las propiedades 87 00:03:16,019 --> 00:03:17,679 de este objeto 88 00:03:17,679 --> 00:03:18,620 que estoy instanciando 89 00:03:18,620 --> 00:03:20,239 la propiedad nombre 90 00:03:20,239 --> 00:03:21,639 ¿cuál será? 91 00:03:23,739 --> 00:03:25,319 pues dis.nombre 92 00:03:25,319 --> 00:03:26,739 igual al parámetro nombre 93 00:03:26,739 --> 00:03:29,439 y la propiedad 94 00:03:29,480 --> 00:03:30,220 raza 95 00:03:30,220 --> 00:03:37,200 este ha sido 96 00:03:37,200 --> 00:03:39,120 nuestro constructor de siempre, ¿verdad? 97 00:03:39,260 --> 00:03:40,660 este ha sido nuestro constructor de siempre 98 00:03:40,660 --> 00:03:43,020 si mi clase tiene dos propiedades 99 00:03:43,020 --> 00:03:44,900 raza y nombre, y es que sé que las tiene 100 00:03:44,900 --> 00:03:46,800 sí o sí, porque nombre 101 00:03:46,800 --> 00:03:48,620 la está heredando de animal 102 00:03:48,620 --> 00:03:50,240 si tiene dos propiedades 103 00:03:50,240 --> 00:03:52,780 lo normal es que yo haga un constructor 104 00:03:52,780 --> 00:03:54,440 al que le paso dos parámetros 105 00:03:54,440 --> 00:03:56,960 y los usa para inicializar 106 00:03:56,960 --> 00:03:57,860 las dos propiedades 107 00:03:57,860 --> 00:03:58,800 ¿vale? 108 00:03:59,480 --> 00:04:01,880 pero efectivamente aquí nos encontramos 109 00:04:01,880 --> 00:04:02,880 con que no me deja 110 00:04:02,880 --> 00:04:05,000 dice, oye, dis.nombre 111 00:04:05,000 --> 00:04:07,740 pero si está, nombre está 112 00:04:07,740 --> 00:04:09,100 es una propiedad que le he dado, está 113 00:04:09,100 --> 00:04:11,680 si miramos el error nos dice 114 00:04:11,680 --> 00:04:13,280 ya, pero es que no es visible 115 00:04:13,280 --> 00:04:16,180 no es visible significa no puedes escribirla 116 00:04:16,180 --> 00:04:17,319 no puedo acceder a ella 117 00:04:17,319 --> 00:04:18,980 claro 118 00:04:18,980 --> 00:04:21,879 es que el tema de los modificadores de acceso 119 00:04:21,879 --> 00:04:22,759 es peliagudo 120 00:04:22,759 --> 00:04:26,020 porque ¿qué significaba cuando poníamos 121 00:04:26,020 --> 00:04:27,840 un private de estos en una clase? 122 00:04:28,720 --> 00:04:29,439 cuando poníamos un private 123 00:04:29,480 --> 00:04:30,080 significaba 124 00:04:30,080 --> 00:04:31,980 a ese término nombre 125 00:04:31,980 --> 00:04:33,720 como tal 126 00:04:33,720 --> 00:04:36,500 solo puedes acceder desde la propia clase 127 00:04:36,500 --> 00:04:38,540 eso es lo que significaba 128 00:04:38,540 --> 00:04:39,700 así punto pelota 129 00:04:39,700 --> 00:04:42,360 y el compilador se lo toma tan a pecho 130 00:04:42,360 --> 00:04:43,840 que dice 131 00:04:43,840 --> 00:04:46,420 sí ya, sí estupendo 132 00:04:46,420 --> 00:04:47,860 si perro tiene una propiedad que se llama nombre 133 00:04:47,860 --> 00:04:48,920 eso seguro, la tiene 134 00:04:48,920 --> 00:04:50,300 de hecho, ¿vale? 135 00:04:50,960 --> 00:04:51,379 pero 136 00:04:51,379 --> 00:04:55,480 no puedes acceder a ella 137 00:04:55,480 --> 00:04:56,439 no puedes 138 00:04:56,439 --> 00:04:58,879 porque está aquí como privada 139 00:04:59,480 --> 00:05:03,500 soluciones, muchas 140 00:05:03,500 --> 00:05:05,900 si uno tiene acceso 141 00:05:05,900 --> 00:05:08,240 a la clase animal de la quereda 142 00:05:08,240 --> 00:05:11,000 puede cambiar 143 00:05:11,000 --> 00:05:13,200 la visibilidad de este modificador 144 00:05:13,200 --> 00:05:14,360 ¿no? 145 00:05:15,300 --> 00:05:16,520 uno podría hacer 146 00:05:16,520 --> 00:05:17,740 pataplof 147 00:05:17,740 --> 00:05:19,960 le quito el privado 148 00:05:19,960 --> 00:05:23,000 ¿qué significa cuando no hay ningún modificador? 149 00:05:23,100 --> 00:05:24,379 no hay ni privado, ni público, ni nada 150 00:05:24,379 --> 00:05:24,980 ¿qué significa? 151 00:05:24,980 --> 00:05:27,800 que es accesible desde cualquier clase 152 00:05:27,800 --> 00:05:28,759 de ese paquete 153 00:05:29,480 --> 00:05:31,280 entonces ya algo hemos arreglado 154 00:05:31,280 --> 00:05:33,500 si es que tenemos acceso a esta clase, repito 155 00:05:33,500 --> 00:05:36,100 entonces como perro está en este mismo paquete 156 00:05:36,100 --> 00:05:37,160 ¿vale? 157 00:05:37,620 --> 00:05:38,319 pues entonces 158 00:05:38,319 --> 00:05:41,240 perro ya sí que nos deja 159 00:05:41,240 --> 00:05:42,400 acceder 160 00:05:42,400 --> 00:05:44,980 porque perro y animal están en el mismo paquete 161 00:05:44,980 --> 00:05:46,140 nos deja 162 00:05:46,140 --> 00:05:48,620 si perro estuviera en otro paquete 163 00:05:48,620 --> 00:05:52,259 es que ni siquiera 164 00:05:52,259 --> 00:05:54,340 quitándole este 165 00:05:54,340 --> 00:05:56,060 tendríamos que ponerle el public 166 00:05:56,060 --> 00:05:56,439 además 167 00:05:56,439 --> 00:05:59,360 porque el public significa desde cualquier 168 00:05:59,360 --> 00:06:01,160 clase de cualquier otro paquete 169 00:06:01,160 --> 00:06:03,960 entonces en este caso 170 00:06:03,960 --> 00:06:05,840 como perro y animal están en el mismo 171 00:06:05,840 --> 00:06:08,280 quitándole el modificador me ha valido 172 00:06:08,280 --> 00:06:09,400 pero si no es que 173 00:06:09,400 --> 00:06:11,400 ni siquiera, si está en otro paquete 174 00:06:11,400 --> 00:06:12,220 tenía que poner public 175 00:06:12,220 --> 00:06:14,620 entonces hombre, es una solución 176 00:06:14,620 --> 00:06:15,800 cambié el modificador 177 00:06:15,800 --> 00:06:17,580 pero primero, eso es muy patatero 178 00:06:17,580 --> 00:06:20,540 para empezar exige que yo tenga acceso 179 00:06:20,540 --> 00:06:21,639 a tocar esta clase 180 00:06:21,639 --> 00:06:24,300 y lo más normal es que no tenga acceso 181 00:06:24,300 --> 00:06:26,699 porque esta es una clase que se ha fijado 182 00:06:26,699 --> 00:06:27,920 precisamente para dar 183 00:06:27,920 --> 00:06:29,240 unas pautas de funcionamiento 184 00:06:29,360 --> 00:06:31,360 tú tienes que sobreescribir y avisar acción 185 00:06:31,360 --> 00:06:32,680 pagar factura para ti, para nada 186 00:06:32,680 --> 00:06:34,280 y esa clase me la han dado 187 00:06:34,280 --> 00:06:35,240 yo no puedo tocarla 188 00:06:35,240 --> 00:06:37,300 entonces no es tan fácil 189 00:06:37,300 --> 00:06:38,360 tocar esa clase 190 00:06:38,360 --> 00:06:41,319 entonces esta solución 191 00:06:41,319 --> 00:06:42,720 pues es un poco pataterilla 192 00:06:42,720 --> 00:06:43,460 a lo mejor ni puedo 193 00:06:43,460 --> 00:06:46,900 y aparte otro problema es 194 00:06:46,900 --> 00:06:47,939 que jolines 195 00:06:47,939 --> 00:06:50,080 quitándole el privado 196 00:06:50,080 --> 00:06:51,900 no solo estoy dando acceso a perro 197 00:06:51,900 --> 00:06:53,680 sino que estoy dando acceso a todos 198 00:06:53,680 --> 00:06:55,199 no solo a perros 199 00:06:55,199 --> 00:06:56,560 sino a todas las que estén en el paquete 200 00:06:56,560 --> 00:06:56,960 a todas 201 00:06:56,960 --> 00:06:58,960 y si pongo public ya ni te cuento 202 00:06:58,960 --> 00:07:00,960 estoy dando acceso a todo el mundo 203 00:07:00,960 --> 00:07:03,740 entonces hombre 204 00:07:03,740 --> 00:07:05,600 cambiar el modificador así alegremente 205 00:07:05,600 --> 00:07:07,780 y quitarle el privado no es sencillo 206 00:07:07,780 --> 00:07:09,920 entonces hay una opción 207 00:07:09,920 --> 00:07:12,780 hay pseudo pataterilla 208 00:07:12,780 --> 00:07:13,240 que es 209 00:07:13,240 --> 00:07:15,100 venga nos inventamos un modificador 210 00:07:15,100 --> 00:07:15,980 de acceso adicional 211 00:07:15,980 --> 00:07:17,800 que es el que mencionamos en su momento 212 00:07:17,800 --> 00:07:19,020 y dije ese ya lo mencionaremos 213 00:07:19,020 --> 00:07:19,840 cuando veamos la denuncia 214 00:07:19,840 --> 00:07:21,120 que es este 215 00:07:21,120 --> 00:07:26,520 el modificador de acceso 216 00:07:26,520 --> 00:07:27,960 protected significa 217 00:07:27,960 --> 00:07:28,800 solo 218 00:07:28,960 --> 00:07:30,700 accesible la propiedad 219 00:07:30,700 --> 00:07:31,740 desde esta clase 220 00:07:31,740 --> 00:07:33,840 y desde las herederas 221 00:07:33,840 --> 00:07:35,460 hombre algo hemos limitado 222 00:07:35,460 --> 00:07:38,340 ya no es desde todas las del paquete 223 00:07:38,340 --> 00:07:41,760 ahora al menos es desde todas las que heredan de mí 224 00:07:41,760 --> 00:07:44,440 algo ya hemos arreglado 225 00:07:44,440 --> 00:07:46,920 vale algo ya hemos arreglado 226 00:07:46,920 --> 00:07:49,240 entonces efectivamente me está dejando 227 00:07:49,240 --> 00:07:50,240 con el protecto 228 00:07:50,240 --> 00:07:51,400 me está dejando 229 00:07:51,400 --> 00:07:54,280 porque perro hereda de animal 230 00:07:54,280 --> 00:07:55,280 si no heredara de animal 231 00:07:55,280 --> 00:07:57,960 no me dejaría acceder a nombre 232 00:07:57,960 --> 00:07:58,960 vale 233 00:07:58,960 --> 00:08:00,700 entonces bueno este modificador 234 00:08:00,700 --> 00:08:02,360 se usa mucho 235 00:08:02,360 --> 00:08:03,500 a ver depende 236 00:08:03,500 --> 00:08:05,000 en función de la aplicación que uno tenga 237 00:08:05,000 --> 00:08:06,960 es que hay miles de situaciones distintas 238 00:08:06,960 --> 00:08:08,160 miles de aplicaciones diferentes 239 00:08:08,160 --> 00:08:08,960 miles de diseños 240 00:08:08,960 --> 00:08:09,680 miles de todos 241 00:08:09,680 --> 00:08:11,280 entonces este modificador 242 00:08:11,280 --> 00:08:13,200 pues uno lo tiene que tener fresco 243 00:08:13,200 --> 00:08:13,920 en lo que significa 244 00:08:13,920 --> 00:08:15,700 y significa eso 245 00:08:15,700 --> 00:08:17,300 todas las clases que hereden de mí 246 00:08:17,300 --> 00:08:18,740 pueden 247 00:08:18,740 --> 00:08:21,800 acceder directamente a ese término nombre 248 00:08:21,800 --> 00:08:22,840 acceder directamente 249 00:08:22,840 --> 00:08:24,020 pero eso solo las querían 250 00:08:24,020 --> 00:08:25,580 vale 251 00:08:25,580 --> 00:08:28,160 pero bueno a lo mejor 252 00:08:28,160 --> 00:08:28,800 podría ocurrir 253 00:08:28,800 --> 00:08:30,800 que yo ni siquiera quiera poner protecter 254 00:08:30,800 --> 00:08:32,019 que quiera dejarlo en privado 255 00:08:32,019 --> 00:08:34,240 porque lo quiero dejar en privado 256 00:08:34,240 --> 00:08:35,980 no lo siento pero no 257 00:08:35,980 --> 00:08:40,180 no puedes cambiar el modificador 258 00:08:40,180 --> 00:08:42,039 entonces si no puedes cambiar 259 00:08:42,039 --> 00:08:43,220 el modificador de acceso 260 00:08:43,220 --> 00:08:45,180 aquí ya sí que estamos 261 00:08:45,180 --> 00:08:46,659 vendidos 262 00:08:46,659 --> 00:08:50,139 porque hacer dis.nombre dentro de perro 263 00:08:50,139 --> 00:08:51,000 imposible 264 00:08:51,000 --> 00:08:53,279 porque nombre está escrita 265 00:08:53,279 --> 00:08:55,680 está escrita físicamente en la clase de arriba 266 00:08:55,680 --> 00:08:57,320 y es privado 267 00:08:57,320 --> 00:08:58,539 y luego solo es de la clase de arriba 268 00:08:58,539 --> 00:08:59,819 entonces aquí sí que estamos vendidos 269 00:08:59,819 --> 00:09:02,439 bueno pues a ver 270 00:09:02,439 --> 00:09:04,559 hay soluciones también 271 00:09:04,559 --> 00:09:05,459 que es hombre 272 00:09:05,459 --> 00:09:08,000 una 273 00:09:08,000 --> 00:09:09,459 podría ser 274 00:09:09,459 --> 00:09:10,500 pues usalset 275 00:09:10,500 --> 00:09:12,939 podría ser usalset 276 00:09:12,939 --> 00:09:14,759 si lo que tú quieres es fijar 277 00:09:14,759 --> 00:09:16,000 la propiedad nombre 278 00:09:16,000 --> 00:09:17,839 con el valor que me dan como parámetro 279 00:09:17,839 --> 00:09:20,059 esto no podemos hacerlo 280 00:09:20,059 --> 00:09:20,559 ¿está claro? 281 00:09:28,539 --> 00:09:42,439 vale es private 282 00:09:42,439 --> 00:09:44,500 voy a poner aquí 283 00:09:44,500 --> 00:09:46,000 tendría que ser protected 284 00:09:46,000 --> 00:09:51,360 vale 285 00:09:51,360 --> 00:09:52,639 esto no podemos 286 00:09:52,639 --> 00:09:56,199 bueno pero lo que sí que hemos heredado 287 00:09:56,199 --> 00:09:57,980 es un método 288 00:09:57,980 --> 00:09:58,519 que se puede hacer 289 00:09:58,519 --> 00:10:00,840 precisamente para hacer las propiedades 290 00:10:00,840 --> 00:10:02,539 hombre pues esto siempre lo podría hacer 291 00:10:02,539 --> 00:10:03,519 ¿no? si a mí me da la gana 292 00:10:03,519 --> 00:10:06,100 dis.set 293 00:10:06,100 --> 00:10:07,139 nombre 294 00:10:07,139 --> 00:10:10,059 hombre pues sí 295 00:10:10,059 --> 00:10:12,519 hace lo que yo quiero 296 00:10:12,519 --> 00:10:13,840 ¿no? es una solución 297 00:10:13,840 --> 00:10:16,000 a la propiedad nombre 298 00:10:16,000 --> 00:10:17,139 de este objeto 299 00:10:17,139 --> 00:10:19,000 ponle este valor 300 00:10:19,000 --> 00:10:22,639 entonces estoy utilizando el set que he heredado 301 00:10:22,639 --> 00:10:24,379 el set que he heredado 302 00:10:24,379 --> 00:10:25,519 bueno pues vale 303 00:10:25,519 --> 00:10:25,840 sí 304 00:10:28,519 --> 00:10:31,379 , vale lo voy a poner ahí 305 00:10:31,379 --> 00:10:32,699 como una posibilidad 306 00:10:32,699 --> 00:10:35,279 lo importante es entenderlo 307 00:10:35,279 --> 00:10:36,519 o sea que esto tiene sentido 308 00:10:36,519 --> 00:10:41,899 pero 309 00:10:41,899 --> 00:10:46,100 esta posibilidad 310 00:10:46,100 --> 00:10:48,819 pues hombre 311 00:10:48,819 --> 00:10:51,419 es feilla 312 00:10:51,419 --> 00:10:51,939 también 313 00:10:51,939 --> 00:10:54,460 sobre todo porque depende 314 00:10:54,460 --> 00:10:57,480 depende de que exista el método set 315 00:10:57,480 --> 00:10:58,379 arriba 316 00:10:58,519 --> 00:10:59,860 y esté heredado 317 00:10:59,860 --> 00:11:01,639 bueno si existe está heredado 318 00:11:01,639 --> 00:11:02,120 no hay otra 319 00:11:02,120 --> 00:11:04,659 depende de que exista el método set arriba 320 00:11:04,659 --> 00:11:07,120 y hombre puede existir o puede no existir 321 00:11:07,120 --> 00:11:09,460 normalmente como pauta general de programación 322 00:11:09,460 --> 00:11:11,120 en las entidades del modelo 323 00:11:11,120 --> 00:11:12,600 pues ponemos get y set 324 00:11:12,600 --> 00:11:14,419 pero hombre 325 00:11:14,419 --> 00:11:16,879 depender de que exista 326 00:11:16,879 --> 00:11:18,379 pues es 327 00:11:18,379 --> 00:11:20,019 hacernos demasiado dependientes 328 00:11:20,019 --> 00:11:21,939 puede existir puede no existir 329 00:11:21,939 --> 00:11:24,960 entonces lo que se suele hacer no es esto 330 00:11:24,960 --> 00:11:28,360 lo que se suele hacer es 331 00:11:28,360 --> 00:11:28,500 lo siguiente 332 00:11:28,500 --> 00:11:30,139 es decir vamos a ver 333 00:11:30,139 --> 00:11:32,460 pues me voy a apoyar 334 00:11:32,460 --> 00:11:33,720 me voy a apoyar 335 00:11:33,720 --> 00:11:35,740 en el constructor de la clase de arriba 336 00:11:35,740 --> 00:11:38,159 es decir la clase animal 337 00:11:38,159 --> 00:11:40,139 ya tiene un constructor 338 00:11:40,139 --> 00:11:41,779 cuyo código 339 00:11:41,779 --> 00:11:44,440 es para hacer esta sentencia que es justo la que quiero 340 00:11:44,440 --> 00:11:46,700 esta sentencia es la que yo quiero 341 00:11:46,700 --> 00:11:47,940 esta es la que yo querría hacer 342 00:11:47,940 --> 00:11:49,299 y esta es la que tengo prohibida 343 00:11:49,299 --> 00:11:50,620 hacer aquí abajo 344 00:11:50,620 --> 00:11:52,220 esta es la que tengo prohibida 345 00:11:52,220 --> 00:11:53,500 la tengo prohibida 346 00:11:53,500 --> 00:11:55,399 pero es que la tengo en el constructor de arriba 347 00:11:55,399 --> 00:11:57,500 pues diríamos 348 00:11:57,500 --> 00:11:58,480 jo pues si yo tengo que hacer esto 349 00:11:58,500 --> 00:11:59,419 si yo tuviera una forma 350 00:11:59,419 --> 00:12:01,259 de llamar al constructor de arriba 351 00:12:01,259 --> 00:12:02,919 magnífico 352 00:12:02,919 --> 00:12:05,200 estaría ejecutando la sentencia 353 00:12:05,200 --> 00:12:06,179 que no me dejan hacer 354 00:12:06,179 --> 00:12:09,019 estaría ejecutando la sentencia que no me dejan hacer 355 00:12:09,019 --> 00:12:10,519 si yo puedo llamar al constructor de arriba 356 00:12:10,519 --> 00:12:13,120 y llamar desde una subclase 357 00:12:13,120 --> 00:12:15,460 al constructor de la superclase 358 00:12:15,460 --> 00:12:17,480 siempre se puede hacer 359 00:12:17,480 --> 00:12:19,080 no hay más que poner super 360 00:12:19,080 --> 00:12:21,419 ya está ya has llamado al constructor 361 00:12:21,419 --> 00:12:22,860 de la superclase 362 00:12:22,860 --> 00:12:24,019 pues venga 363 00:12:24,019 --> 00:12:27,759 vamos a llamar al constructor de la superclase 364 00:12:27,759 --> 00:12:28,379 desde aquí 365 00:12:28,379 --> 00:12:34,539 vale 366 00:12:34,539 --> 00:12:35,779 super 367 00:12:35,779 --> 00:12:38,799 ya estoy llamando al constructor de la superclase 368 00:12:38,799 --> 00:12:40,480 pero 369 00:12:40,480 --> 00:12:42,879 si el constructor de mi superclase 370 00:12:42,879 --> 00:12:44,379 me está pidiendo un parámetro 371 00:12:44,379 --> 00:12:46,220 lógicamente porque lo que hace es esto 372 00:12:46,220 --> 00:12:48,220 pues vamos a pasarle el parámetro 373 00:12:48,220 --> 00:12:49,759 ¿qué parámetro le quieres pasar? 374 00:12:49,879 --> 00:12:50,139 este 375 00:12:50,139 --> 00:12:52,460 pues ala 376 00:12:52,460 --> 00:12:55,899 magnífico 377 00:12:55,899 --> 00:12:57,700 voy a dejar esto comentado 378 00:12:57,700 --> 00:12:58,360 y voy a pasarle el parámetro 379 00:12:58,379 --> 00:13:04,539 ¿qué me está diciendo? 380 00:13:04,539 --> 00:13:05,539 vale 381 00:13:05,539 --> 00:13:11,820 si lo es 382 00:13:11,820 --> 00:13:16,879 vale entonces ¿por qué lo he puesto aquí arriba? 383 00:13:17,879 --> 00:13:19,139 porque si uno usa 384 00:13:19,139 --> 00:13:20,820 la llamada al constructor de arriba 385 00:13:20,820 --> 00:13:23,200 tiene que ser siempre la primera línea 386 00:13:23,200 --> 00:13:24,799 de todo lo que hay en el constructor 387 00:13:24,799 --> 00:13:27,100 si hay un super en algún sitio 388 00:13:27,100 --> 00:13:27,539 tiene que ser la primera línea 389 00:13:27,539 --> 00:13:27,559 tiene que ser la primera línea 390 00:13:27,559 --> 00:13:27,639 tiene que ser la primera línea 391 00:13:27,639 --> 00:13:28,240 tiene que ser la primera línea 392 00:13:28,240 --> 00:13:28,360 tiene que ser la primera línea 393 00:13:28,360 --> 00:13:30,519 vale, pues se lo ha puesto al principio 394 00:13:30,519 --> 00:13:32,440 que me está diciendo, tienes que ponerlo al principio 395 00:13:32,440 --> 00:13:33,680 pero joder, hay que estar al principio, ¿no? 396 00:13:36,460 --> 00:13:37,940 ah, call, claro 397 00:13:37,940 --> 00:13:40,139 que es que no sé, efectivamente, he hecho un constructor 398 00:13:40,139 --> 00:13:41,840 con un void ahí, vale, vale, gracias 399 00:13:41,840 --> 00:13:44,019 vale, vale, sí, sí es 400 00:13:44,019 --> 00:13:44,560 vale 401 00:13:44,560 --> 00:13:50,759 bueno, pues esto sí es lo habitual 402 00:13:50,759 --> 00:13:52,840 esto sí es lo habitual 403 00:13:52,840 --> 00:13:54,700 cuando hay clases que le dan unas de otras 404 00:13:54,700 --> 00:13:57,159 que el constructor de una subclase 405 00:13:57,159 --> 00:13:58,819 se construya 406 00:13:58,819 --> 00:14:00,659 apoyándose en llamadas 407 00:14:00,659 --> 00:14:01,679 al constructor de arriba 408 00:14:01,679 --> 00:14:04,000 y en las llamadas al constructor de arriba 409 00:14:04,000 --> 00:14:06,679 las aprovecho para inicializar 410 00:14:06,679 --> 00:14:08,379 las propiedades que no veo 411 00:14:08,379 --> 00:14:10,319 como nombre 412 00:14:10,319 --> 00:14:12,259 no la vemos, no pasa nada 413 00:14:12,259 --> 00:14:13,839 le paso el parámetro 414 00:14:13,839 --> 00:14:15,579 al constructor de arriba 415 00:14:15,579 --> 00:14:18,539 y a través del constructor 416 00:14:18,539 --> 00:14:20,659 de arriba ya hago la línea 417 00:14:20,659 --> 00:14:21,500 que no podía hacer 418 00:14:21,500 --> 00:14:26,559 vale, pues así 419 00:14:26,560 --> 00:14:27,360 se suelen hacer 420 00:14:27,360 --> 00:14:30,760 voy a poner esto aquí para que quede más pegadito 421 00:14:30,760 --> 00:14:36,440 así es como se suelen hacer los constructores 422 00:14:36,440 --> 00:14:38,960 apoyándose en el de arriba 423 00:14:38,960 --> 00:14:40,340 primero llamas al de arriba 424 00:14:40,340 --> 00:14:41,900 para inicializar las propiedades 425 00:14:41,900 --> 00:14:43,720 a las que tú no tienes acceso porque has heredado 426 00:14:43,720 --> 00:14:44,400 y tienen privado 427 00:14:44,400 --> 00:14:48,160 y luego ya inicializas las propias tuyas 428 00:14:48,160 --> 00:14:50,060 suele ser lo habitual 429 00:14:50,060 --> 00:14:52,940 vale 430 00:14:52,940 --> 00:14:56,120 entonces, aquí hemos llamado a super 431 00:14:56,120 --> 00:14:56,899 con un parámetro 432 00:14:56,899 --> 00:14:59,440 porque el constructor de arriba 433 00:14:59,440 --> 00:15:02,899 recibe un parámetro 434 00:15:02,899 --> 00:15:05,340 pero claro, el constructor 435 00:15:05,340 --> 00:15:06,840 puede recibir lo que 436 00:15:06,840 --> 00:15:10,200 cualquier cosa, depende de lo que sea 437 00:15:10,200 --> 00:15:11,120 vale 438 00:15:11,120 --> 00:15:15,539 y en 439 00:15:15,539 --> 00:15:18,100 vale 440 00:15:18,100 --> 00:15:19,460 en pez, pues lo mismo 441 00:15:19,460 --> 00:15:21,639 lo ideal sería en donde estamos 442 00:15:21,639 --> 00:15:22,539 donde está el pez 443 00:15:26,120 --> 00:15:27,539 vale, pez 444 00:15:27,539 --> 00:15:29,139 yo lo he generado automáticamente 445 00:15:29,139 --> 00:15:30,480 y me lo ha generado ya él así 446 00:15:30,480 --> 00:15:31,320 vale 447 00:15:31,320 --> 00:15:34,019 vamos a 448 00:15:34,019 --> 00:15:37,560 vale 449 00:15:37,560 --> 00:15:41,060 bueno, pues así tenemos los constructores 450 00:15:41,060 --> 00:15:43,480 de perro y de pez 451 00:15:43,480 --> 00:15:45,220 apoyados en el de arriba 452 00:15:45,220 --> 00:15:47,659 vale 453 00:15:47,659 --> 00:15:51,259 está entendido entonces lo que significa el super 454 00:15:51,259 --> 00:15:53,080 super es la llamada 455 00:15:53,080 --> 00:15:54,539 al método constructor de arriba 456 00:15:54,539 --> 00:15:56,100 que a mí me puede interesar hacerla 457 00:15:56,120 --> 00:15:56,820 o no 458 00:15:56,820 --> 00:15:59,799 pero normalmente dentro de un constructor 459 00:15:59,799 --> 00:16:00,820 suele ser la forma 460 00:16:00,820 --> 00:16:03,720 de inicializar tus propiedades 461 00:16:03,720 --> 00:16:05,980 las heredadas las inicializas 462 00:16:05,980 --> 00:16:07,399 llamando al constructor de arriba 463 00:16:07,399 --> 00:16:09,179 y las tuyas propias 464 00:16:09,179 --> 00:16:11,560 ya las inicializas directamente una a una 465 00:16:11,560 --> 00:16:13,860 vale 466 00:16:13,860 --> 00:16:15,799 entonces, al constructor de perro 467 00:16:15,799 --> 00:16:17,120 como tiene dos propiedades 468 00:16:17,120 --> 00:16:18,659 pues le pasamos dos cosas 469 00:16:18,659 --> 00:16:20,580 aunque yo aquí solamente vea una 470 00:16:20,580 --> 00:16:21,620 pero es que la otra está arriba 471 00:16:21,620 --> 00:16:23,360 la inicializo aquí 472 00:16:23,360 --> 00:16:25,100 y la otra aquí 473 00:16:25,100 --> 00:16:25,460 vale 474 00:16:26,120 --> 00:16:29,840 está entendido 475 00:16:29,840 --> 00:16:33,799 vale 476 00:16:33,799 --> 00:16:34,820 ¿y qué pasa aquí con ave? 477 00:16:37,060 --> 00:16:38,279 bueno, aquí para empezar 478 00:16:38,279 --> 00:16:40,659 me dice que tengo que sobrescribir 479 00:16:40,659 --> 00:16:41,919 el método abstracto 480 00:16:41,919 --> 00:16:44,159 pero aparte se ha hecho aquí un poco la pichonía 481 00:16:44,159 --> 00:16:45,039 con los constructores 482 00:16:45,039 --> 00:16:47,360 ahora ya podemos entender por qué se la está haciendo 483 00:16:47,360 --> 00:16:49,299 vale 484 00:16:49,299 --> 00:16:51,639 de hecho es el primer error que me está dando 485 00:16:51,639 --> 00:16:53,460 bueno, me está dando dos errores 486 00:16:56,120 --> 00:16:58,360 ahora mismo la clase ave está de aquí 487 00:16:58,360 --> 00:16:59,200 me está diciendo 488 00:16:59,200 --> 00:17:02,940 dos cosas mal 489 00:17:02,940 --> 00:17:04,039 me está 490 00:17:04,039 --> 00:17:08,980 regañando en dos cosas 491 00:17:08,980 --> 00:17:12,240 esta de abajo 492 00:17:12,240 --> 00:17:13,480 ya la hemos dicho antes 493 00:17:13,480 --> 00:17:15,119 me dice, perdona 494 00:17:15,119 --> 00:17:16,700 pero el tipo ave, lo siento 495 00:17:16,700 --> 00:17:19,339 debe dar cuerpo al método abstracto heredado 496 00:17:19,339 --> 00:17:20,099 realizar acción 497 00:17:20,099 --> 00:17:21,539 eso ya lo hemos dicho 498 00:17:21,539 --> 00:17:23,660 este es un método abstracto en animal 499 00:17:23,660 --> 00:17:24,680 lo siento mucho 500 00:17:24,680 --> 00:17:25,960 si quieres heredar de animal 501 00:17:25,960 --> 00:17:28,539 tienes que implementar 502 00:17:28,539 --> 00:17:30,579 implementar es dar cuerpo 503 00:17:30,579 --> 00:17:31,140 dar código 504 00:17:31,140 --> 00:17:33,319 tienes que implementar el método heredado 505 00:17:33,319 --> 00:17:34,920 eso ya lo sabemos 506 00:17:34,920 --> 00:17:36,400 bueno, vamos a dejar ese problema 507 00:17:36,400 --> 00:17:38,100 para que nos quede solo el error de arriba 508 00:17:38,100 --> 00:17:39,500 que tiene que ver con los constructores 509 00:17:39,500 --> 00:17:41,519 venga, pues hombre 510 00:17:41,519 --> 00:17:44,180 uno tendría que escribir la cabecera 511 00:17:44,180 --> 00:17:45,600 y ya dar lo que sea 512 00:17:45,600 --> 00:17:47,819 pero bueno, como estamos vagos 513 00:17:47,819 --> 00:17:51,480 y si controlamos y sabemos 514 00:17:51,480 --> 00:17:53,059 el eclipse es útil 515 00:17:53,059 --> 00:17:54,579 si no, el eclipse nos hunde 516 00:17:54,579 --> 00:17:55,940 pues vamos a tener que 517 00:17:55,940 --> 00:17:56,440 vamos a, venga 518 00:17:56,440 --> 00:17:58,500 añade métodos no implementados 519 00:17:58,500 --> 00:18:00,259 pues le das aquí, añade 520 00:18:00,259 --> 00:18:02,220 y él te copia la cabecera del de arriba 521 00:18:02,220 --> 00:18:04,039 y ya abajo te lo deja en blanco 522 00:18:04,039 --> 00:18:04,960 para que tú hagas lo que sea 523 00:18:04,960 --> 00:18:09,880 vale, pues estupendo 524 00:18:09,880 --> 00:18:11,059 esto es lo que nosotros queríamos 525 00:18:11,059 --> 00:18:12,900 para arreglar ese segundo error 526 00:18:12,900 --> 00:18:15,059 este, te dice 527 00:18:15,059 --> 00:18:15,820 esta anotación 528 00:18:15,820 --> 00:18:16,880 por ahora la quitamos 529 00:18:16,880 --> 00:18:20,559 ni molesta, ni deja de molestar 530 00:18:20,559 --> 00:18:21,559 ahora mismo no nos interesa 531 00:18:21,559 --> 00:18:22,320 así que la quitamos 532 00:18:22,320 --> 00:18:24,860 vale, pues ya está sobrescrito 533 00:18:24,860 --> 00:18:25,559 y ya está listo 534 00:18:25,940 --> 00:18:27,279 hombre, a ver, no tiene cuerpo 535 00:18:27,279 --> 00:18:29,519 no tiene, vamos a ponerle algo 536 00:18:29,519 --> 00:18:31,299 realizar acción del animal 537 00:18:31,299 --> 00:18:32,539 pues bueno, este es un ave 538 00:18:32,539 --> 00:18:35,720 pues ala, ya está sobrescrito 539 00:18:35,720 --> 00:18:36,580 ya tiene su acción 540 00:18:36,580 --> 00:18:39,880 ya tienen el perro 541 00:18:39,880 --> 00:18:40,840 el pez y el ave 542 00:18:40,840 --> 00:18:42,860 ya todos tienen su acción sobrescrita 543 00:18:42,860 --> 00:18:44,539 al heredar de animal 544 00:18:44,539 --> 00:18:47,320 han tenido obligatoriamente que sobrescribir la acción 545 00:18:47,320 --> 00:18:49,940 vale, pero nos sigue quedando un error 546 00:18:49,940 --> 00:18:55,200 nos sigue quedando un error 547 00:18:55,200 --> 00:18:55,500 por resolverlo 548 00:18:55,940 --> 00:18:58,519 que es 549 00:18:58,519 --> 00:19:02,500 nos dice aquí 550 00:19:02,500 --> 00:19:06,920 oye, el constructor animal sin parámetros 551 00:19:06,920 --> 00:19:07,900 no está definido 552 00:19:07,900 --> 00:19:09,600 hombre, claro que lo sé 553 00:19:09,600 --> 00:19:11,120 que no está definido 554 00:19:11,120 --> 00:19:12,900 claro que sé que no está definido 555 00:19:12,900 --> 00:19:14,360 vámonos animal 556 00:19:14,360 --> 00:19:16,580 aquí en animal solo está este 557 00:19:16,580 --> 00:19:18,960 el sin parámetros no está 558 00:19:18,960 --> 00:19:22,539 claro, la pregunta sería 559 00:19:22,539 --> 00:19:24,519 pero y por qué este 560 00:19:24,519 --> 00:19:25,920 necesita que se suba 561 00:19:25,940 --> 00:19:27,960 para que el de arriba sin parámetros esté 562 00:19:27,960 --> 00:19:31,940 bueno, pues vamos a intentar entenderlo 563 00:19:32,460 --> 00:19:34,840 a ver 564 00:19:34,840 --> 00:19:40,940 vámonos a esta clase animal 565 00:19:40,940 --> 00:19:43,140 esta clase tal y como está 566 00:19:43,140 --> 00:19:46,220 no tiene ningún constructor 567 00:19:46,220 --> 00:19:46,940 no tiene ninguno 568 00:19:46,940 --> 00:19:48,080 no tiene nada 569 00:19:48,080 --> 00:19:50,279 no tiene ningún constructor 570 00:19:50,279 --> 00:19:52,440 vale, nosotros ya sabemos 571 00:19:52,440 --> 00:19:53,759 porque ya lo hemos dicho en su momento 572 00:19:53,759 --> 00:19:55,559 que cuando en una clase no es 573 00:19:55,559 --> 00:19:57,179 no he escrito ningún constructor 574 00:19:57,179 --> 00:19:59,879 en realidad es como si tuviera 575 00:19:59,879 --> 00:20:01,440 uno sin parámetros vacío 576 00:20:01,440 --> 00:20:02,700 es lo que hemos dicho siempre 577 00:20:02,700 --> 00:20:04,419 si yo no he escrito ninguno 578 00:20:04,419 --> 00:20:06,720 en realidad lo que tengo ahí escondido 579 00:20:06,720 --> 00:20:07,659 aunque yo no lo vea 580 00:20:07,659 --> 00:20:09,259 es este 581 00:20:09,259 --> 00:20:22,799 es lo que hemos dicho siempre 582 00:20:22,799 --> 00:20:24,899 si yo en una clase no pongo un constructor 583 00:20:24,900 --> 00:20:26,940 entonces se asume 584 00:20:26,940 --> 00:20:28,320 que por defecto está eso ahí 585 00:20:28,320 --> 00:20:30,080 claro 586 00:20:30,080 --> 00:20:32,019 pero eso es así 587 00:20:32,019 --> 00:20:33,960 si la clase no hereda de nadie 588 00:20:33,960 --> 00:20:36,600 si la clase hereda de alguien 589 00:20:36,600 --> 00:20:38,440 Java lo que se inventa 590 00:20:38,440 --> 00:20:41,160 es que entonces el constructor por defecto 591 00:20:41,160 --> 00:20:43,460 es este más el súper vacío 592 00:20:43,460 --> 00:20:45,160 esto es lo que él se inventa 593 00:20:45,160 --> 00:20:46,140 esto 594 00:20:46,140 --> 00:20:47,620 se inventa esto 595 00:20:47,620 --> 00:20:49,660 dice que tú no tienes nada 596 00:20:49,660 --> 00:20:51,600 en ninguna clase no tienes nada 597 00:20:51,600 --> 00:20:54,120 pues es como si tuvieras un constructor 598 00:20:54,120 --> 00:20:54,880 que no hace nada 599 00:20:54,880 --> 00:20:56,380 nada más que llamar al 600 00:20:56,380 --> 00:20:58,380 de la súper clase sin parámetros 601 00:20:58,380 --> 00:21:00,360 él se inventa y dice 602 00:21:00,360 --> 00:21:01,520 no me has escrito ningún constructor 603 00:21:01,520 --> 00:21:02,600 pues entonces es el que te pongo 604 00:21:02,600 --> 00:21:03,420 te pones ese 605 00:21:03,420 --> 00:21:04,680 aunque no lo veamos físicamente 606 00:21:04,680 --> 00:21:06,200 aunque no lo veamos 607 00:21:06,200 --> 00:21:08,000 este es el que nos ha puesto 608 00:21:08,000 --> 00:21:10,020 luego tenerlo yo escrito 609 00:21:10,020 --> 00:21:10,740 y no tener nada 610 00:21:10,740 --> 00:21:12,180 es lo mismo es equivalente 611 00:21:12,180 --> 00:21:14,000 porque este es el que nos está poniendo 612 00:21:14,000 --> 00:21:15,800 claro y aquel compilador dice 613 00:21:15,800 --> 00:21:16,300 pues no 614 00:21:16,300 --> 00:21:17,620 imposible 615 00:21:17,620 --> 00:21:19,100 porque esto que es 616 00:21:19,100 --> 00:21:21,940 llamada al constructor de la súper clase 617 00:21:21,940 --> 00:21:23,640 pero todos los constructores 618 00:21:23,640 --> 00:21:24,820 el que no tenga parámetro 619 00:21:24,819 --> 00:21:27,240 nos vamos a animal 620 00:21:27,240 --> 00:21:30,099 y no hay ningún constructor sin parámetros 621 00:21:30,099 --> 00:21:31,159 no hay ninguno 622 00:21:31,159 --> 00:21:34,119 pues es justo lo que nos está diciendo 623 00:21:34,119 --> 00:21:34,740 el compilador 624 00:21:34,740 --> 00:21:36,519 cuando yo he quitado esto 625 00:21:36,519 --> 00:21:38,480 me está diciendo 626 00:21:38,480 --> 00:21:41,079 tienes un constructor 627 00:21:41,079 --> 00:21:43,079 que llama al súper sin parámetros 628 00:21:43,079 --> 00:21:44,159 me voy yo a animal 629 00:21:44,159 --> 00:21:46,039 y no veo ningún constructor sin parámetros 630 00:21:46,039 --> 00:21:47,119 lo siento 631 00:21:47,119 --> 00:21:48,200 no puedes 632 00:21:48,200 --> 00:21:50,200 por eso me sale este error aquí 633 00:21:50,200 --> 00:21:51,200 si yo no escribo nada 634 00:21:51,200 --> 00:21:52,519 ¿vale? 635 00:21:53,359 --> 00:21:53,839 soluciones 636 00:21:53,839 --> 00:21:54,319 pues claro 637 00:21:54,319 --> 00:21:56,439 desde el momento en que yo hago un constructor ya suyo 638 00:21:56,439 --> 00:21:57,079 con parámetros 639 00:21:57,079 --> 00:21:59,259 un constructor normal y corriente 640 00:21:59,259 --> 00:22:01,559 como este 641 00:22:01,559 --> 00:22:03,939 pues ya está 642 00:22:03,939 --> 00:22:05,639 ya está solucionado 643 00:22:05,639 --> 00:22:06,539 me he hecho un constructor 644 00:22:06,539 --> 00:22:09,200 que llama a un constructor que ya existe 645 00:22:09,200 --> 00:22:11,240 ¿eh? 646 00:22:11,839 --> 00:22:13,039 pues a mí no me está dando error 647 00:22:13,039 --> 00:22:14,740 porque yo siempre tengo un constructor sin parámetros 648 00:22:14,740 --> 00:22:15,059 claro 649 00:22:15,059 --> 00:22:15,879 claro 650 00:22:15,879 --> 00:22:17,799 con esta combinación nos daría 651 00:22:17,799 --> 00:22:19,419 pero con la otra tampoco 652 00:22:19,419 --> 00:22:21,099 yo lo dejo así sin parámetros 653 00:22:21,099 --> 00:22:22,939 y digo bueno no pasa nada 654 00:22:22,939 --> 00:22:23,619 me voy a animal 655 00:22:23,619 --> 00:22:24,299 y te hago un constructor sin parámetros 656 00:22:24,319 --> 00:22:25,980 ala venga 657 00:22:25,980 --> 00:22:27,679 te voy a hacer uno 658 00:22:27,679 --> 00:22:30,039 public animal 659 00:22:30,039 --> 00:22:31,819 ala sí vacío 660 00:22:31,819 --> 00:22:32,639 ya está 661 00:22:32,639 --> 00:22:34,179 estupendo 662 00:22:34,179 --> 00:22:36,099 a ave se le quita el error 663 00:22:36,099 --> 00:22:37,859 porque ahora ya 664 00:22:37,859 --> 00:22:40,339 esto que realmente tiene 665 00:22:40,339 --> 00:22:41,439 aunque yo no lo vea 666 00:22:41,439 --> 00:22:42,939 perdona 667 00:22:42,939 --> 00:22:43,700 era esto 668 00:22:43,700 --> 00:22:48,200 esto que realmente es lo que tiene 669 00:22:48,200 --> 00:22:49,379 aunque yo no lo vea 670 00:22:49,379 --> 00:22:50,839 a lo que está llamando ahora 671 00:22:50,839 --> 00:22:53,500 es a la versión del constructor sin parámetros 672 00:22:53,500 --> 00:22:54,299 que ya sí que existe 673 00:22:54,319 --> 00:22:56,039 y así que existe 674 00:22:56,039 --> 00:22:56,879 entonces el compilador dice 675 00:22:56,879 --> 00:22:57,879 marín magnífico 676 00:22:57,879 --> 00:22:59,539 pero que yo esto lo quito 677 00:22:59,539 --> 00:23:01,919 fuera que esto lo quito 678 00:23:01,919 --> 00:23:04,339 pues el ave está 679 00:23:04,339 --> 00:23:06,119 pues se vuelve loca otra vez 680 00:23:06,119 --> 00:23:06,539 me dice 681 00:23:06,539 --> 00:23:09,919 entonces bueno 682 00:23:09,919 --> 00:23:11,899 de nuevo se trata de entender las cosas 683 00:23:11,899 --> 00:23:13,639 y luego ya cada uno 684 00:23:13,639 --> 00:23:16,539 pues da la solución que estime oportuna 685 00:23:16,539 --> 00:23:17,720 aquí en este caso natural 686 00:23:17,720 --> 00:23:20,460 es que todas las clases tengan su constructor 687 00:23:20,460 --> 00:23:22,460 con parámetros que utiliza las propiedades 688 00:23:22,460 --> 00:23:24,299 entonces pues 689 00:23:24,319 --> 00:23:25,419 en este caso lo que 690 00:23:25,419 --> 00:23:26,319 esto por ejemplo 691 00:23:26,319 --> 00:23:31,179 en este caso que el ave tiene además 692 00:23:31,179 --> 00:23:32,059 una propiedad suya 693 00:23:32,059 --> 00:23:33,159 que debería tenerla 694 00:23:33,159 --> 00:23:33,980 hombre 695 00:23:33,980 --> 00:23:34,839 es lo natural 696 00:23:34,839 --> 00:23:35,899 porque si no para que hereda 697 00:23:35,899 --> 00:23:38,399 pues privado el ave 698 00:23:38,399 --> 00:23:39,319 pues yo que sé 699 00:23:39,319 --> 00:23:40,839 que tiene un ave 700 00:23:40,839 --> 00:23:41,919 que no tenga el resto de animales 701 00:23:41,919 --> 00:23:42,819 aparte de alas 702 00:23:42,819 --> 00:23:43,139 pero 703 00:23:43,139 --> 00:23:48,619 claro y eso como 704 00:23:48,619 --> 00:23:49,819 venga velocidad de vuelo 705 00:23:49,819 --> 00:23:50,359 pues ya está 706 00:23:50,359 --> 00:23:53,359 la velocidad que pueda alcanzar 707 00:23:53,359 --> 00:23:53,819 yo que sé 708 00:23:53,819 --> 00:23:54,259 altura 709 00:23:54,259 --> 00:23:54,299 y después 710 00:23:54,319 --> 00:23:55,539 La altura a la que puede volar 711 00:23:55,539 --> 00:24:01,159 Bueno, pues aquí uno podría ya tener su 712 00:24:01,159 --> 00:24:08,319 Y ahora aquí ya tendríamos 713 00:24:08,319 --> 00:24:10,740 Pues esto, dis.altura 714 00:24:10,740 --> 00:24:16,059 Aquí ya no hay ningún problema 715 00:24:16,059 --> 00:24:17,519 O sea, al tener un constructor 716 00:24:17,519 --> 00:24:19,659 Ya hecho 717 00:24:19,659 --> 00:24:21,500 El constructor sin parámetros ya no está 718 00:24:21,500 --> 00:24:22,839 Ya se, ya no está 719 00:24:22,839 --> 00:24:24,519 Entonces no hay ningún problema 720 00:24:24,519 --> 00:24:27,699 ¿Vale? 721 00:24:40,579 --> 00:24:42,579 Bueno, está entendidísimo 722 00:24:42,579 --> 00:24:46,220 Pues esto en realidad es 723 00:24:46,220 --> 00:24:49,179 Todo lo importante de la herencia 724 00:24:49,179 --> 00:24:51,179 Todo, y luego ya de aquí se derivan 725 00:24:51,179 --> 00:24:52,720 Muchas posibilidades de programar 726 00:24:52,720 --> 00:24:54,079 De para ti si uno lo usa bien 727 00:24:54,079 --> 00:24:55,319 Claro, si uno se lo usa bien 728 00:24:55,319 --> 00:24:55,880 Pero es esto 729 00:24:55,880 --> 00:24:58,640 Y luego esto, ¿por qué se queda cojo a veces? 730 00:24:59,600 --> 00:25:01,019 Pues por lo que ya dijimos el otro día 731 00:25:01,019 --> 00:25:03,519 Que solo se puede heredar de una clase 732 00:25:03,519 --> 00:25:06,700 Entonces, ¿cómo recojo yo el hecho 733 00:25:06,700 --> 00:25:08,339 De que un cliente 734 00:25:08,339 --> 00:25:10,400 Un cliente tienda 735 00:25:10,400 --> 00:25:11,819 Pues sea a la vez cliente 736 00:25:11,819 --> 00:25:12,779 Y a la vez sea socio 737 00:25:12,779 --> 00:25:14,120 El ejemplo este que os hice el otro día 738 00:25:14,120 --> 00:25:14,640 A la vez sea 739 00:25:14,640 --> 00:25:16,160 Si se lo puede heredar de una 740 00:25:16,160 --> 00:25:16,799 No lo recojo 741 00:25:16,799 --> 00:25:18,299 Bueno, pues entonces se siguen poniendo 742 00:25:18,299 --> 00:25:20,339 Nuevas cosas, etcétera, etcétera 743 00:25:20,339 --> 00:25:22,059 Como interfaces, etcétera, etcétera 744 00:25:22,059 --> 00:25:22,660 ¿Vale? 745 00:25:22,720 --> 00:25:27,180 Vale 746 00:25:27,180 --> 00:25:33,120 Y ya para terminar 747 00:25:33,120 --> 00:25:33,880 Y ya nos vamos 748 00:25:33,880 --> 00:25:35,279 Porque ya hoy no nos va a dar tiempo 749 00:25:35,279 --> 00:25:36,839 A hacer ningún ejercicio ya ni nada 750 00:25:36,839 --> 00:25:37,539 Eso ya mañana 751 00:25:37,539 --> 00:25:40,920 Vale, ya vamos a completar 752 00:25:40,920 --> 00:25:42,220 En realidad 753 00:25:42,220 --> 00:25:43,940 Hay una clase 754 00:25:43,940 --> 00:25:45,220 Que está por ahí 755 00:25:45,220 --> 00:25:51,259 La máquina virtual nos la da 756 00:25:52,720 --> 00:25:55,140 Si uno mira aquí en la máquina virtual 757 00:25:55,140 --> 00:25:57,420 Todas las cosas que le da 758 00:25:57,420 --> 00:26:00,920 Pues por ejemplo 759 00:26:00,920 --> 00:26:01,720 Hay una clase 760 00:26:01,720 --> 00:26:04,799 Que se llama 761 00:26:04,799 --> 00:26:08,339 Object 762 00:26:08,339 --> 00:26:12,180 De todas las miles de clases 763 00:26:12,180 --> 00:26:13,680 Que me da a mí la máquina virtual 764 00:26:13,680 --> 00:26:15,380 Para yo poder llamarlas y hacer cosas 765 00:26:15,380 --> 00:26:17,100 Como la clase string 766 00:26:17,100 --> 00:26:18,640 La clase escáner 767 00:26:18,640 --> 00:26:20,140 Bueno, muchas 768 00:26:20,140 --> 00:26:21,779 Hay una que es 769 00:26:21,779 --> 00:26:23,240 Especial 770 00:26:23,240 --> 00:26:24,339 Que es la clase object 771 00:26:24,339 --> 00:26:26,579 Bueno, pues la clase object 772 00:26:26,579 --> 00:26:27,279 Es una clase 773 00:26:27,279 --> 00:26:28,399 De la cual 774 00:26:28,399 --> 00:26:30,339 Cualquier otra clase hereda 775 00:26:30,339 --> 00:26:31,879 Aunque yo no ponga el extens 776 00:26:31,879 --> 00:26:35,180 O sea, si yo hago una clase 777 00:26:35,180 --> 00:26:37,139 Y no pongo extens algo 778 00:26:37,139 --> 00:26:39,700 Esa clase hereda de esta 779 00:26:39,700 --> 00:26:41,180 Hereda de esta 780 00:26:41,180 --> 00:26:42,579 Por narices 781 00:26:42,579 --> 00:26:46,119 Entonces esta clase 782 00:26:46,119 --> 00:26:47,720 Ofrece algunas cositas 783 00:26:47,720 --> 00:26:50,799 Pero son muy abiertas 784 00:26:50,799 --> 00:26:53,039 Uno las tendría luego que sobrescribir 785 00:26:53,039 --> 00:26:55,019 Es decir, esta es la clase object 786 00:26:55,019 --> 00:26:56,700 Esta clase object 787 00:26:56,700 --> 00:26:58,519 Que 788 00:26:58,519 --> 00:27:01,500 Ofrece 789 00:27:01,500 --> 00:27:02,659 Pues 790 00:27:02,659 --> 00:27:04,720 Métodos 791 00:27:04,720 --> 00:27:07,779 Vale 792 00:27:07,779 --> 00:27:09,659 El equals 793 00:27:09,659 --> 00:27:14,099 Ofrece aquí un montón de métodos 794 00:27:14,099 --> 00:27:16,099 Que cualquiera de nuestras clases 795 00:27:16,099 --> 00:27:16,919 Está heredando 796 00:27:16,919 --> 00:27:18,879 Sin saberlo, son muy poquitos 797 00:27:18,879 --> 00:27:19,779 Que los ofrece 798 00:27:19,779 --> 00:27:20,759 Y algunos de ellos 799 00:27:20,759 --> 00:27:20,779 Son muy poquitos 800 00:27:20,799 --> 00:27:22,180 Los iremos entendiendo 801 00:27:22,180 --> 00:27:22,440 Entonces 802 00:27:22,440 --> 00:27:24,079 Por ejemplo, la clase animal 803 00:27:24,079 --> 00:27:26,220 La clase animal 804 00:27:26,220 --> 00:27:27,480 No tiene ningún extens 805 00:27:27,480 --> 00:27:28,220 No tiene ninguno 806 00:27:28,220 --> 00:27:29,899 No tiene nada 807 00:27:29,899 --> 00:27:32,019 ¿Qué significa? 808 00:27:32,119 --> 00:27:32,839 Que en realidad 809 00:27:32,839 --> 00:27:34,619 Aunque yo no lo ponga 810 00:27:34,619 --> 00:27:35,879 Está heredando de object 811 00:27:35,879 --> 00:27:37,440 Entonces dejarlo en blanco 812 00:27:37,440 --> 00:27:39,500 O dejar esto 813 00:27:39,500 --> 00:27:43,940 Es lo mismo 814 00:27:43,940 --> 00:27:45,180 Es lo mismo 815 00:27:45,180 --> 00:27:46,500 Por eso no se pone 816 00:27:46,500 --> 00:27:48,079 Por eso no se pone 817 00:27:48,079 --> 00:27:49,559 ¿Vale? 818 00:27:49,559 --> 00:27:50,460 Cualquier clase 819 00:27:50,460 --> 00:27:50,779 Sin embargo 820 00:27:50,799 --> 00:27:51,379 Si no se indica 821 00:27:51,379 --> 00:27:52,079 De cual hereda 822 00:27:52,079 --> 00:27:53,799 Hereda de la clase object 823 00:27:53,799 --> 00:27:54,859 ¿Vale? 824 00:27:56,980 --> 00:27:57,740 Que ahora 825 00:27:57,740 --> 00:27:59,599 Perro hereda de animal 826 00:27:59,599 --> 00:28:02,220 Pues entonces 827 00:28:02,220 --> 00:28:03,799 Perro hereda de animal 828 00:28:03,799 --> 00:28:05,379 Y como animal a su vez 829 00:28:05,379 --> 00:28:06,180 Hereda de object 830 00:28:06,180 --> 00:28:07,919 Perro también se ha quedado 831 00:28:07,919 --> 00:28:08,819 Con todo lo de object 832 00:28:08,819 --> 00:28:09,720 ¿No? 833 00:28:09,879 --> 00:28:10,599 O sea, lo de la 834 00:28:10,599 --> 00:28:12,000 Lo del abuelo 835 00:28:12,000 --> 00:28:12,799 Que es object 836 00:28:12,799 --> 00:28:15,299 Pasa todo al hijo 837 00:28:15,299 --> 00:28:16,200 Que es animal 838 00:28:16,200 --> 00:28:18,099 Al padre, vamos 839 00:28:18,099 --> 00:28:19,740 Entonces animal tiene 840 00:28:19,740 --> 00:28:20,379 Todo lo de object 841 00:28:20,379 --> 00:28:20,779 Y lo suyo 842 00:28:20,799 --> 00:28:23,099 Entonces quien herede de animal 843 00:28:23,099 --> 00:28:24,619 Se queda con todo lo de animal 844 00:28:24,619 --> 00:28:25,460 Que a su vez es 845 00:28:25,460 --> 00:28:26,159 Todo lo de object 846 00:28:26,159 --> 00:28:26,879 Y todo lo de animal 847 00:28:26,879 --> 00:28:27,440 ¿No? 848 00:28:27,799 --> 00:28:28,419 O sea, la herencia 849 00:28:28,419 --> 00:28:29,940 Se va 850 00:28:29,940 --> 00:28:31,399 Que alguien hereda de perro 851 00:28:31,399 --> 00:28:32,799 Pues el que herede de perro 852 00:28:32,799 --> 00:28:34,419 Se queda con todo lo que tiene perro 853 00:28:34,419 --> 00:28:35,480 Que a su vez es 854 00:28:35,480 --> 00:28:36,559 Todo lo que tenía animal 855 00:28:36,559 --> 00:28:37,399 Que a su vez es 856 00:28:37,399 --> 00:28:38,220 Todo lo que tenía object 857 00:28:38,220 --> 00:28:39,299 ¿Vale? 858 00:28:39,299 --> 00:28:40,359 Entonces hay una jerarquía 859 00:28:40,359 --> 00:28:40,720 Una herencia 860 00:28:40,720 --> 00:28:42,759 De varios niveles 861 00:28:42,759 --> 00:28:43,460 Obviamente 862 00:28:43,460 --> 00:28:48,259 De hecho 863 00:28:48,259 --> 00:28:49,399 Cuando nosotros 864 00:28:49,399 --> 00:28:50,779 Tenemos un objeto 865 00:28:50,799 --> 00:28:51,539 Animal por aquí 866 00:28:51,539 --> 00:28:52,099 Cualquiera 867 00:28:52,099 --> 00:28:55,000 En nuestro main 868 00:28:55,000 --> 00:28:55,759 Por ejemplo 869 00:28:55,759 --> 00:28:56,799 Vamos a 870 00:28:56,799 --> 00:29:03,779 Me aparece aquí en rojo 871 00:29:03,779 --> 00:29:04,460 Y no veo el error 872 00:29:04,460 --> 00:29:06,000 Ah, está aquí abajo 873 00:29:06,000 --> 00:29:07,759 Ah, aquí 874 00:29:07,759 --> 00:29:08,579 Que había comentado 875 00:29:08,579 --> 00:29:10,419 El objeto animal 876 00:29:10,419 --> 00:29:10,779 Vale 877 00:29:10,779 --> 00:29:12,720 Vale 878 00:29:12,720 --> 00:29:19,579 Vale 879 00:29:19,579 --> 00:29:20,460 Entonces le voy a quitar 880 00:29:20,460 --> 00:29:20,900 Un momento 881 00:29:20,900 --> 00:29:21,980 Animal el abstracto 882 00:29:21,980 --> 00:29:23,200 Para poder instanciar 883 00:29:23,200 --> 00:29:23,940 Objetos de él 884 00:29:23,940 --> 00:29:26,120 Le voy a quitar 885 00:29:26,120 --> 00:29:27,160 Un momento el abstracto 886 00:29:27,160 --> 00:29:28,039 Para poder 887 00:29:28,039 --> 00:29:32,120 Instanciar objetos suyos 888 00:29:32,120 --> 00:29:33,860 ¿Vale? 889 00:29:33,880 --> 00:29:35,120 Le voy a quitar el abstracto 890 00:29:35,120 --> 00:29:35,539 De aquí 891 00:29:35,539 --> 00:29:44,400 Y aquí entonces 892 00:29:44,400 --> 00:29:45,740 Le pondría esto 893 00:29:45,740 --> 00:29:47,000 Vale 894 00:29:47,000 --> 00:29:47,980 Le he quitado el abstracto 895 00:29:47,980 --> 00:29:48,480 Solamente 896 00:29:48,480 --> 00:29:49,779 Y lo he dejado 897 00:29:49,779 --> 00:29:50,299 Un método 898 00:29:50,299 --> 00:29:51,000 Ya con llaves 899 00:29:51,000 --> 00:29:51,779 Aunque no haga nada 900 00:29:51,779 --> 00:29:54,359 Para poder instanciar 901 00:29:54,359 --> 00:29:55,480 Un objeto animal 902 00:29:55,480 --> 00:29:56,460 Para poder instanciarlo 903 00:29:56,460 --> 00:29:57,079 Entonces haberle quitado 904 00:29:57,079 --> 00:29:57,519 El abstracto 905 00:29:57,519 --> 00:29:58,519 Ahora ya puedo instanciarlo 906 00:29:58,519 --> 00:29:58,759 ¿Vale? 907 00:29:58,879 --> 00:29:59,720 Tengo el nuevo animal 908 00:29:59,720 --> 00:30:00,980 Vale 909 00:30:00,980 --> 00:30:01,859 Pues este objeto 910 00:30:01,859 --> 00:30:03,599 A 911 00:30:03,599 --> 00:30:05,359 Si yo miro 912 00:30:05,359 --> 00:30:06,180 Todo lo que tiene 913 00:30:06,180 --> 00:30:09,200 Pues además 914 00:30:09,200 --> 00:30:10,899 De lo que yo he escrito 915 00:30:10,899 --> 00:30:11,399 En animal 916 00:30:11,399 --> 00:30:12,339 Que era 917 00:30:12,339 --> 00:30:12,819 ¿Vale? 918 00:30:12,819 --> 00:30:12,879 ¿Vale? 919 00:30:12,879 --> 00:30:12,940 ¿Vale? 920 00:30:12,940 --> 00:30:13,440 ¿Vale? 921 00:30:13,440 --> 00:30:13,539 ¿Vale? 922 00:30:13,539 --> 00:30:13,639 ¿Vale? 923 00:30:13,639 --> 00:30:13,740 ¿Vale? 924 00:30:13,740 --> 00:30:14,259 ¿Vale? 925 00:30:14,259 --> 00:30:14,339 ¿Vale? 926 00:30:14,339 --> 00:30:14,819 ¿Vale? 927 00:30:14,819 --> 00:30:15,619 ¿Vale? 928 00:30:15,619 --> 00:30:15,859 ¿Vale? 929 00:30:15,859 --> 00:30:15,940 ¿Vale? 930 00:30:15,940 --> 00:30:15,960 ¿Vale? 931 00:30:15,960 --> 00:30:16,419 ¿Vale? 932 00:30:16,419 --> 00:30:16,919 ¿Vale? 933 00:30:16,919 --> 00:30:17,339 ¿Vale? 934 00:30:17,339 --> 00:30:17,700 ¿Vale? 935 00:30:17,700 --> 00:30:18,059 ¿Vale? 936 00:30:18,059 --> 00:30:18,500 ¿Vale? 937 00:30:21,500 --> 00:30:21,819 ¿Vale? 938 00:30:21,919 --> 00:30:22,099 ¿Vale? 939 00:30:22,099 --> 00:30:22,279 ¿Vale? 940 00:30:22,279 --> 00:30:22,339 ¿Vale? 941 00:30:22,339 --> 00:30:22,359 ¿Vale? 942 00:30:22,359 --> 00:30:22,519 ¿Vale? 943 00:30:22,519 --> 00:30:22,539 ¿Vale? 944 00:30:22,539 --> 00:30:22,559 ¿Vale? 945 00:30:22,559 --> 00:30:22,659 ¿Vale? 946 00:30:22,659 --> 00:30:22,679 ¿Vale? 947 00:30:22,679 --> 00:30:22,980 ¿Vale? 948 00:30:22,980 --> 00:30:23,000 ¿Vale? 949 00:30:23,000 --> 00:30:23,299 ¿Vale? 950 00:30:23,299 --> 00:30:23,319 ¿Vale? 951 00:30:23,319 --> 00:30:23,379 ¿Vale? 952 00:30:23,379 --> 00:30:23,399 ¿Vale? 953 00:30:23,399 --> 00:30:23,460 ¿Vale? 954 00:30:23,460 --> 00:30:23,480 ¿Vale? 955 00:30:23,480 --> 00:30:23,539 ¿Vale? 956 00:30:23,539 --> 00:30:23,559 ¿Vale? 957 00:30:23,559 --> 00:30:23,859 ¿Vale? 958 00:30:23,859 --> 00:30:23,879 ¿Vale? 959 00:30:23,879 --> 00:30:24,759 Claro, eso 960 00:30:24,759 --> 00:30:26,960 Para poder instanciar un objeto 961 00:30:26,960 --> 00:30:27,579 A ver lo que hereda 962 00:30:27,579 --> 00:30:28,919 Pues además de comer 963 00:30:28,919 --> 00:30:29,639 Que lo he hecho en animal 964 00:30:29,639 --> 00:30:30,639 Y está claro que lo tengo 965 00:30:30,639 --> 00:30:32,319 Y además del get 966 00:30:32,319 --> 00:30:33,299 Y del set 967 00:30:33,299 --> 00:30:35,419 Estas son las únicas tres cosas 968 00:30:35,419 --> 00:30:36,519 Que he hecho yo en animal 969 00:30:36,519 --> 00:30:37,740 Comer 970 00:30:37,740 --> 00:30:38,839 Get 971 00:30:38,840 --> 00:30:39,880 Y el set 972 00:30:39,880 --> 00:30:41,040 El único que he hecho 973 00:30:41,040 --> 00:30:42,460 Pues todo lo demás 974 00:30:42,460 --> 00:30:43,860 Me está dejando llamarlo también 975 00:30:43,860 --> 00:30:45,300 Y todo lo demás 976 00:30:45,300 --> 00:30:45,680 ¿Qué es? 977 00:30:46,040 --> 00:30:46,840 Métodos de object 978 00:30:46,840 --> 00:30:48,240 Son métodos de object 979 00:30:48,240 --> 00:30:51,620 Lo que pasa es que son métodos de object 980 00:30:51,620 --> 00:30:53,560 Que me ofrecen muy poquitas cosas 981 00:30:53,560 --> 00:30:54,880 ¿Vale? 982 00:30:54,900 --> 00:30:55,560 Los de notify 983 00:30:55,560 --> 00:30:56,520 En particular 984 00:30:56,520 --> 00:30:58,680 Están relacionados con sincronización 985 00:30:58,680 --> 00:30:59,860 Cuando hay varios hilos 986 00:30:59,860 --> 00:31:00,880 Otros no los vamos a usar 987 00:31:00,880 --> 00:31:03,420 El toString 988 00:31:03,420 --> 00:31:04,740 Es un método 989 00:31:04,740 --> 00:31:05,840 Que me devuelve un string 990 00:31:05,840 --> 00:31:07,480 Que se supone que es 991 00:31:07,480 --> 00:31:08,540 La explicación 992 00:31:08,540 --> 00:31:08,820 De la explicación 993 00:31:08,840 --> 00:31:10,000 De lo que es el objeto 994 00:31:10,000 --> 00:31:10,820 Pero es una explicación 995 00:31:10,820 --> 00:31:11,720 Que no vale para nada 996 00:31:11,720 --> 00:31:13,860 Entonces lo ideal es que uno 997 00:31:13,860 --> 00:31:15,360 Se sobreescriba el toString 998 00:31:15,360 --> 00:31:17,700 ¿Vale? 999 00:31:18,080 --> 00:31:19,560 El hashcode es para generar 1000 00:31:19,560 --> 00:31:20,240 Un código hash 1001 00:31:20,240 --> 00:31:20,920 Pero eso tiene que ver 1002 00:31:20,920 --> 00:31:21,580 Con colecciones 1003 00:31:21,580 --> 00:31:22,560 Con conjuntos 1004 00:31:22,560 --> 00:31:23,980 Ofrece pocas cosas 1005 00:31:23,980 --> 00:31:25,540 El equals 1006 00:31:25,540 --> 00:31:27,940 El equals 1007 00:31:27,940 --> 00:31:29,100 Es un método 1008 00:31:29,100 --> 00:31:29,800 Que está en object 1009 00:31:29,800 --> 00:31:32,240 Que lo único que te devuelve 1010 00:31:32,240 --> 00:31:32,640 Es true 1011 00:31:32,640 --> 00:31:34,960 Si la dirección de memoria 1012 00:31:34,960 --> 00:31:36,460 Del objeto este 1013 00:31:36,460 --> 00:31:37,280 Que tú le pasas 1014 00:31:37,280 --> 00:31:38,820 Es la dirección de memoria 1015 00:31:38,820 --> 00:31:38,840 De la aplicación 1016 00:31:38,840 --> 00:31:39,520 Del que llama 1017 00:31:39,520 --> 00:31:40,520 Te devuelve eso 1018 00:31:40,520 --> 00:31:41,820 Que te interesa ese equals 1019 00:31:41,820 --> 00:31:42,100 ¿Vale? 1020 00:31:42,140 --> 00:31:42,480 Que no 1021 00:31:42,480 --> 00:31:43,800 Sobreescribes el equals 1022 00:31:43,800 --> 00:31:45,000 ¿Vale? 1023 00:31:45,060 --> 00:31:45,620 No nos da tiempo 1024 00:31:45,620 --> 00:31:46,400 Ahora a ver ejemplos 1025 00:31:46,400 --> 00:31:47,160 ¿Has tenido que quitar 1026 00:31:47,160 --> 00:31:48,980 El modificador de astras 1027 00:31:48,980 --> 00:31:49,440 Para poder? 1028 00:31:49,760 --> 00:31:50,200 Claro, claro 1029 00:31:50,200 --> 00:31:51,300 Si no, no puedo crear objetos 1030 00:31:51,300 --> 00:31:52,500 A ver, lo que yo quería era 1031 00:31:52,500 --> 00:31:53,860 Instanciar aquí 1032 00:31:53,860 --> 00:31:54,840 Un objeto animal 1033 00:31:54,840 --> 00:31:56,760 Aquí hacer el new 1034 00:31:56,760 --> 00:31:58,400 Para poder ver los métodos 1035 00:31:58,400 --> 00:31:59,980 Entonces si yo no quito el astra 1036 00:31:59,980 --> 00:32:01,340 No puedo instanciarlo 1037 00:32:01,340 --> 00:32:02,520 Por eso lo he quitado 1038 00:32:02,520 --> 00:32:03,920 Se supone que la clase animal 1039 00:32:03,920 --> 00:32:05,200 Era de un objeto 1040 00:32:05,200 --> 00:32:06,040 Porque no 1041 00:32:06,040 --> 00:32:07,960 No lo recogió 1042 00:32:07,960 --> 00:32:08,000 ¿Vale? 1043 00:32:08,840 --> 00:32:10,560 Bueno, sí, a ver 1044 00:32:10,560 --> 00:32:13,000 Sí, sí, sí 1045 00:32:13,000 --> 00:32:15,540 Sí, lo que pasa es que ahora estoy 1046 00:32:15,540 --> 00:32:16,860 Sí, pero lo que pasa es que 1047 00:32:16,860 --> 00:32:17,140 A ver 1048 00:32:17,140 --> 00:32:18,980 Que ahora yo estoy en mi main 1049 00:32:18,980 --> 00:32:20,620 Y quería tener un objeto a 1050 00:32:20,620 --> 00:32:21,520 Quería tenerlo ahí hecho 1051 00:32:21,520 --> 00:32:21,980 En mi main 1052 00:32:21,980 --> 00:32:23,680 Para poder llamar a sus cosas 1053 00:32:23,680 --> 00:32:25,240 Quería que existiera ese objeto 1054 00:32:25,240 --> 00:32:26,820 Quería que existiera 1055 00:32:26,820 --> 00:32:28,700 Pues para jugar a llamar a cosas 1056 00:32:28,700 --> 00:32:30,360 Entonces para que este objeto exista 1057 00:32:30,360 --> 00:32:31,820 Y poder yo hacer pruebas 1058 00:32:31,820 --> 00:32:32,620 Y llamar a cosas 1059 00:32:32,620 --> 00:32:34,080 Tiene que existir 1060 00:32:34,080 --> 00:32:35,860 Si no, luego no podría ejecutar esto 1061 00:32:35,860 --> 00:32:37,180 Entonces por eso 1062 00:32:37,180 --> 00:32:38,320 Yo no puedo hacer el new 1063 00:32:38,320 --> 00:32:38,820 Y no puedo hacer el new 1064 00:32:38,819 --> 00:32:39,700 No puedo 1065 00:32:39,700 --> 00:32:41,559 Si es abstracta 1066 00:32:41,559 --> 00:32:43,299 Por eso le he quitado el abstracto 1067 00:32:43,299 --> 00:32:44,179 Para poder hacer el new 1068 00:32:44,179 --> 00:32:46,220 Solamente para poder hacer el new 1069 00:32:46,220 --> 00:32:47,359 ¿Vale? 1070 00:32:47,980 --> 00:32:49,000 A ver, que yo para 1071 00:32:49,000 --> 00:32:50,679 Para ver el listado de métodos 1072 00:32:50,679 --> 00:32:52,159 El área no me hace falta 1073 00:32:52,159 --> 00:32:54,859 Porque el compilador ya me los va a ofrecer 1074 00:32:54,859 --> 00:32:56,259 O sea, yo no hago el new 1075 00:32:56,259 --> 00:32:58,799 Y ahora hago, hago aquí 1076 00:32:58,799 --> 00:32:59,879 A punto 1077 00:32:59,879 --> 00:33:03,039 Y la oferta me la hace igual 1078 00:33:03,039 --> 00:33:04,740 Porque esto es un tema de compilador 1079 00:33:04,740 --> 00:33:05,639 El compilador me dice 1080 00:33:05,639 --> 00:33:08,019 Ah, está declarado arriba como animal 1081 00:33:08,019 --> 00:33:08,639 ¿Puedes llamar a eso? 1082 00:33:08,640 --> 00:33:09,220 ¿Puedes llamar a esto? 1083 00:33:09,580 --> 00:33:11,259 Lo que pasa es que si luego ejecutáramos esto 1084 00:33:11,259 --> 00:33:13,420 A no está instanciado 1085 00:33:13,420 --> 00:33:16,620 Entonces yo no podría ejecutar nada 1086 00:33:16,620 --> 00:33:17,759 Porque el objeto A no existe 1087 00:33:17,759 --> 00:33:18,640 ¿Vale? 1088 00:33:18,860 --> 00:33:21,220 Entonces simplemente he quitado el abstracto 1089 00:33:21,220 --> 00:33:23,980 Para poder hacer este A igual a new animal 1090 00:33:23,980 --> 00:33:25,220 Solamente 1091 00:33:25,220 --> 00:33:26,860 Porque si no, no puedo 1092 00:33:26,860 --> 00:33:29,340 No puedo instanciar objetos de una clase abstracta 1093 00:33:29,340 --> 00:33:29,780 ¿Vale? 1094 00:33:32,660 --> 00:33:33,180 ¿Vale? 1095 00:33:33,259 --> 00:33:34,140 Pues entonces 1096 00:33:34,140 --> 00:33:38,100 Estos métodos que me ofrece TheObject 1097 00:33:38,100 --> 00:33:39,380 Equals to string 1098 00:33:39,380 --> 00:33:41,560 Yo puedo ahora ya aprovecharme de ellos 1099 00:33:41,560 --> 00:33:42,380 Sobrescribiéndolos 1100 00:33:42,380 --> 00:33:44,280 Puedo aprovecharme y hacer mi aplicación 1101 00:33:44,280 --> 00:33:46,760 Un poquito más, más vistosa 1102 00:33:46,760 --> 00:33:48,660 Pero bueno, vamos a dejarlo ya para 1103 00:33:48,660 --> 00:33:50,940 Para el próximo día