1 00:00:00,730 --> 00:00:06,349 Voy a grabar esta clase, por lo tanto, si habláis, autorizáis la grabación de vuestra voz. 2 00:00:07,110 --> 00:00:15,089 Después de haber visto objetos, clases, constructores y cosas básicas de la programación orientada a objetos, 3 00:00:15,330 --> 00:00:21,010 empezaremos hoy a ver herencia. Rápido repaso para que quede grabado. 4 00:00:22,250 --> 00:00:27,829 Nosotros antes hemos estado en un mundo de programación estructurada. 5 00:00:27,829 --> 00:00:36,969 hemos ignorado las características de orientación a objetos de Java 6 00:00:36,969 --> 00:00:43,509 y hemos trabajado como si fuera un lenguaje de programación viejo, entre comillas. 7 00:00:44,070 --> 00:00:47,390 Entonces, ahí hemos visto la declaración de variables, 8 00:00:47,670 --> 00:00:54,429 hemos visto programar en el sentido de hacer una instrucción tras otra 9 00:00:54,429 --> 00:00:56,130 en una secuencia de instrucciones. 10 00:00:56,130 --> 00:01:07,109 luego hemos empezado a pensar, el flujo de ejecución tiene que estar siempre así, o sea, siempre uno tras otro, o se puede modificar. 11 00:01:07,329 --> 00:01:14,569 Hemos visto lo que son las sentencias de control, que permiten modificar el flujo de ejecución de un programa. 12 00:01:14,829 --> 00:01:22,730 Entonces hemos visto el if, que me permite ejecutar o no un bloque de instrucciones dependiendo de una cierta condición booleana. 13 00:01:22,730 --> 00:01:35,909 Expresión booleana, expresión booleana que ya sois expertos en encontrar valores de verdad en expresiones booleanas complejas con operadores como AND, OR, etc. 14 00:01:36,450 --> 00:01:48,909 Hemos visto también la posibilidad de ejecutar un bloque de sentencias, de instrucciones, más de una vez. 15 00:01:48,909 --> 00:01:54,950 Y hemos visto sus dos variantes principales, que son el for y el while. 16 00:01:55,230 --> 00:02:00,670 El while se utiliza cuando no sé cuántas veces voy a repetir este bloque. 17 00:02:01,010 --> 00:02:06,170 El for se suele utilizar cuando sé cuántas veces voy a repetir este bloque. 18 00:02:06,390 --> 00:02:13,770 También hemos visto, un poquito más tarde, pero como ya ahora lo hemos visto, lo que es la llamada a un método. 19 00:02:13,770 --> 00:02:42,090 Entonces hemos visto que nosotros podemos dar un nombre a un bloque de instrucciones, parametrizarlo con unos parámetros formales y luego llamar este bloque desde otro sitio, desde un main, desde otro método, llamar con el nombre este bloque de instrucciones para que se ejecutan parametrizados con unos determinados parámetros que le pasó en ese momento, o sea los parámetros actuales. 20 00:02:42,090 --> 00:02:52,150 La diferencia entre parámetros formales y parámetros actuales en este momento la sabéis perfectamente, por lo tanto no hace falta volver a explicar. 21 00:02:54,900 --> 00:02:55,780 ¿Qué más hemos visto? 22 00:02:55,840 --> 00:02:57,539 Hemos empezado a ver los objetos, ¿vale? 23 00:02:57,560 --> 00:03:00,240 Entonces hemos visto el concepto de clase, 24 00:03:00,439 --> 00:03:02,580 hemos visto que sostancialmente es un molde, 25 00:03:02,580 --> 00:03:07,699 es una forma de definir las características 26 00:03:07,699 --> 00:03:10,659 y las funcionalidades de un objeto que voy a modelizar 27 00:03:10,659 --> 00:03:13,460 para que luego pueda, a partir de este molde, 28 00:03:13,580 --> 00:03:15,819 crear objetos, crear copias 29 00:03:15,819 --> 00:03:18,539 que tienen toda la misma estructura, 30 00:03:18,680 --> 00:03:20,080 tienen todas las mismas características, 31 00:03:20,259 --> 00:03:21,280 las mismas funcionalidades, 32 00:03:21,280 --> 00:03:28,360 pero son copias distintas, son copias que tienen una vida separada una de la otra 33 00:03:28,360 --> 00:03:31,060 y que no se influencian una de la otra. 34 00:03:31,520 --> 00:03:36,300 Si yo creo el objeto A y el objeto B, si hago una modificación o hago hacer algo al objeto A, 35 00:03:36,400 --> 00:03:38,159 el objeto B no se ve modificado. 36 00:03:38,639 --> 00:03:42,240 Además, tanto el objeto A como el objeto B tendrán sus propias características 37 00:03:42,240 --> 00:03:45,159 y por lo tanto será identificado de alguna forma. 38 00:03:45,360 --> 00:03:47,539 Luego, depende de lo que yo quiero hacer. 39 00:03:47,539 --> 00:04:10,479 Yo puedo hacer el objeto persona y modelizarlo de formas completamente distintas dependiendo del sistema en el que estoy. Habrá sistemas en el que requerirá que el concepto de persona tenga unas ciertas características y habrá otros sistemas que esas características a lo mejor no son suficientes y necesitaré más características o necesitaré características distintas. 40 00:04:10,479 --> 00:04:32,339 Entonces, no es que persona se hace así y todo lo que quiere modelizar a una persona lo tiene que hacer así, ¿vale? En un sistema podría ser suficiente saber el nombre y el apellido de la persona, en otro debería ser nombre, apellido y el DNI, en otro el nombre, apellido y el DNI y también dónde vive y cuántos años tiene y quién son sus familiares, no lo sé, ¿vale? 41 00:04:32,339 --> 00:04:43,660 Entonces, la idea es que, en la parte anterior a esta, nosotros hemos aprendido a hacer pequeños 42 00:04:43,660 --> 00:04:53,779 ejercicios en el que se nos daba un problema definiendo en palabras, en castellano, un 43 00:04:53,779 --> 00:05:00,899 objeto y nosotros, a partir de eso, teníamos que crear una, dos, tres clases a veces entrelazadas 44 00:05:00,899 --> 00:05:02,319 entre ellas, ¿vale? Como en el caso 45 00:05:02,319 --> 00:05:04,779 típico de alumno, con sus materias 46 00:05:04,779 --> 00:05:07,000 y la materia tiene una nota, etcétera, etcétera. 47 00:05:07,560 --> 00:05:08,899 Y encontrar 48 00:05:08,899 --> 00:05:10,660 la forma, digamos, de trabajar 49 00:05:10,660 --> 00:05:12,180 con esto. Nosotros 50 00:05:12,180 --> 00:05:14,899 en este momento deberíamos haber aprendido, 51 00:05:15,019 --> 00:05:16,220 deberíamos saber hacer 52 00:05:16,220 --> 00:05:18,420 lo básico. Me dicen, 53 00:05:18,560 --> 00:05:20,660 oye, mira, quiero modelizar un taller 54 00:05:20,660 --> 00:05:22,620 de autos, pues de 55 00:05:22,620 --> 00:05:25,019 coches, pues voy a pensar 56 00:05:25,019 --> 00:05:26,699 cuáles son los elementos, 57 00:05:26,920 --> 00:05:28,800 cuáles son los objetos 58 00:05:28,800 --> 00:05:30,160 que voy a necesitar, 59 00:05:30,160 --> 00:05:39,339 el objeto coche, el objeto mecánico, el objeto factura, el objeto... lo que me haga falta y a 60 00:05:39,339 --> 00:05:48,220 ese punto crear mi sistema. Nosotros podemos hacer sistemas recientes sencillos. Como ayuda para hacer 61 00:05:48,220 --> 00:05:55,839 sistemas no demasiado sencillos, con un cierto nivel de complejidad, han venido los arrays, 62 00:05:55,839 --> 00:05:58,259 que son otro grande tema que hemos visto en la primera 63 00:05:58,259 --> 00:06:00,399 evaluación, los arrays son colecciones 64 00:06:00,399 --> 00:06:02,279 de datos sustancialmente, son en vez 65 00:06:02,279 --> 00:06:04,100 de una variable con dentro un valor 66 00:06:04,100 --> 00:06:05,819 concreto, pues tengo 67 00:06:05,819 --> 00:06:08,300 una variable que 68 00:06:08,300 --> 00:06:10,459 apunta a una colección 69 00:06:10,459 --> 00:06:12,259 de datos de un determinado tipo 70 00:06:12,259 --> 00:06:14,139 y los arrays pueden ser de todo 71 00:06:14,139 --> 00:06:16,439 pueden ser arrays de int, pueden ser arrays de double 72 00:06:16,439 --> 00:06:18,019 pero pueden ser también 73 00:06:18,019 --> 00:06:20,180 arrays de objetos, que es lo que 74 00:06:20,180 --> 00:06:21,759 nos interesa a nosotros, porque nosotros 75 00:06:21,759 --> 00:06:24,439 con programación orientada a objetos, al fin y al cabo 76 00:06:24,439 --> 00:06:25,339 lo que necesitamos 77 00:06:25,339 --> 00:06:27,259 es manejar muchos 78 00:06:27,259 --> 00:06:29,319 objetos. Entonces, cuando yo tengo array, 79 00:06:29,560 --> 00:06:30,860 cuando tengo un coche, 80 00:06:31,420 --> 00:06:33,279 no quiero una variable que tenga dentro 81 00:06:33,279 --> 00:06:35,259 un coche, porque no sé cuántos coches van a 82 00:06:35,259 --> 00:06:37,379 venir a mi taller. Prefiero 83 00:06:37,379 --> 00:06:39,639 tener un array de coches. 84 00:06:40,759 --> 00:06:41,360 Esto 85 00:06:41,360 --> 00:06:43,000 me permite poner ahí dentro 86 00:06:43,000 --> 00:06:45,199 todos los coches que llegan 87 00:06:45,199 --> 00:06:47,100 a mi taller y trabajar 88 00:06:47,100 --> 00:06:49,480 con ellos. Arreglarlos, repararlos, 89 00:06:49,699 --> 00:06:50,560 venderlos, 90 00:06:51,720 --> 00:06:52,839 desguazarlos. 91 00:06:52,839 --> 00:06:57,139 cosas por el estilo, ¿vale? Dependiendo 92 00:06:57,139 --> 00:07:00,639 de lo que tiene que hacer mi sistema. Pero el manejo 93 00:07:00,639 --> 00:07:05,040 de arrays en este momento es fundamental para poder 94 00:07:05,040 --> 00:07:08,579 gestionar este tipo de sistemas un poquito más complejos. Esto se 95 00:07:08,579 --> 00:07:12,740 sustituirá dentro de un rato, después de esta 96 00:07:12,740 --> 00:07:15,860 parte, digamos, teórica de programación orientada a objetos 97 00:07:15,860 --> 00:07:20,699 PRO, veremos las colecciones de datos, 98 00:07:20,699 --> 00:07:24,379 Las colecciones de datos sustituirán los arrays. 99 00:07:24,800 --> 00:07:27,899 Son formas un poquito más sencillas que los arrays. 100 00:07:28,040 --> 00:07:38,360 ¿Os acordáis cuando nosotros hicimos una clase estática que permitía darme un array y un nuevo objeto? 101 00:07:39,180 --> 00:07:45,160 Y ese añadía este objeto a ese array y me devolvía un array más grande con ese objeto dentro. 102 00:07:46,579 --> 00:07:47,319 ¿Os acordáis? 103 00:07:49,279 --> 00:07:49,959 Repito. 104 00:07:50,699 --> 00:07:55,139 ¿Os acordáis que nosotros hicimos unos métodos, que os puedo enseñar? 105 00:07:58,240 --> 00:08:12,120 ¿Os acordáis que nosotros hicimos un método que se llamaba gestor array, una clase, gestor array, con métodos, lo diré, estáticos, ¿vale? 106 00:08:12,120 --> 00:08:19,800 Porque nos dependían del objeto, dependían de la clase, no había objeto, nosotros nos creábamos objetos de gestión array, ¿vale? 107 00:08:20,699 --> 00:08:31,329 lo atendré en objetos por algún lado, gestionaré, ¿vale? 108 00:08:31,529 --> 00:08:39,289 Entonces nosotros nos hicimos esta clase que luego íbamos copiando 109 00:08:39,289 --> 00:08:42,789 donde queríamos y le añadíamos cosas, en realidad esta debería haber sido 110 00:08:42,789 --> 00:08:46,309 única en algún lado para que luego si modifico lo modifico allí 111 00:08:46,309 --> 00:08:50,389 y lo uso en todo el lado, pero bueno, donde nosotros creamos este método aquí, 112 00:08:50,850 --> 00:08:54,549 que era un método de, por ejemplo, esto era para string y decía, 113 00:08:54,549 --> 00:08:56,769 ok, quiero añadir 114 00:08:56,769 --> 00:08:58,289 esta string de aquí 115 00:08:58,289 --> 00:09:00,529 a este array, ¿vale? 116 00:09:00,669 --> 00:09:02,049 Entonces tú me pasabas 117 00:09:02,049 --> 00:09:04,250 un string y me pasaba un array, 118 00:09:04,610 --> 00:09:06,649 yo lo que hacía era hacer más grande 119 00:09:06,649 --> 00:09:08,309 el array que me has pasado, 120 00:09:09,009 --> 00:09:10,690 copiar el array 121 00:09:10,690 --> 00:09:12,409 que me has pasado en el nuevo array 122 00:09:12,409 --> 00:09:14,450 y luego añadir al fondo 123 00:09:14,450 --> 00:09:16,629 el elemento que me has pasado 124 00:09:16,629 --> 00:09:18,950 en él, ¿vale? Y te devuelvo 125 00:09:18,950 --> 00:09:20,350 el nuevo array. 126 00:09:22,250 --> 00:09:22,389 ¿Sí? 127 00:09:23,129 --> 00:09:24,169 Pues esto 128 00:09:24,169 --> 00:09:29,009 es lo que hará, en un cierto sentido, las colecciones. 129 00:09:29,450 --> 00:09:32,870 Cuando nosotros veremos las colecciones, son clases ya hechas 130 00:09:32,870 --> 00:09:35,190 que en vez de tener que hacerlo yo a mano, 131 00:09:35,950 --> 00:09:39,529 ya me proporciona un método add que me dice, añade un elemento. 132 00:09:39,529 --> 00:09:41,990 Entonces yo tendré una lista de coches 133 00:09:41,990 --> 00:09:45,490 y en vez de estar pensando, oye, ¿cuánto es grande la lista? 134 00:09:45,830 --> 00:09:47,590 ¿Cuánto grande la he hecho? ¿La tengo que extender? 135 00:09:47,769 --> 00:09:49,330 Pues no, tendré un método add. 136 00:09:49,769 --> 00:09:53,629 Lo que hago es añadir un nuevo coche y él en automático me lo añade. 137 00:09:53,629 --> 00:09:57,929 Porque por debajo estará haciendo algo parecido a esto. 138 00:09:58,830 --> 00:10:00,830 Dependiendo de cómo estáis o por debajo. 139 00:10:01,429 --> 00:10:02,289 Pero es siempre lo mismo. 140 00:10:02,690 --> 00:10:05,909 Nosotros hemos empezado desde abajo y vamos hacia arriba. 141 00:10:06,289 --> 00:10:08,350 Abajo, arriba, ¿en qué eje? 142 00:10:09,169 --> 00:10:11,129 Estamos aumentando nosotros. 143 00:10:13,090 --> 00:10:14,870 Exacto. El nivel de abstracción. 144 00:10:15,690 --> 00:10:19,629 Nosotros hemos empezado con cosas muy concretas, con operaciones muy concretas. 145 00:10:19,629 --> 00:10:33,769 Y luego vamos escondiéndose estas operaciones en operaciones que llamamos, le damos un nombre, como por ejemplo add, y este me añade un elemento a un array y yo no sé cómo lo hace, pero lo hace, ¿vale? 146 00:10:34,029 --> 00:10:44,669 Lo sé porque lo he estudiado y porque lo he hecho yo, pero en un futuro me darán algunos métodos que yo no sé cómo funcionan y aún así lo uso, esto lo estamos ya haciendo. 147 00:10:44,669 --> 00:10:47,549 El printerln, ¿quién sabe cómo funciona el printerln? 148 00:10:49,129 --> 00:10:54,330 ¿Quién, si yo os dijera, vale, printerln no lo podéis utilizar, escribid en pantalla, 149 00:10:55,090 --> 00:10:58,669 ¿cuántos de vosotros sabrían programar el printerln? 150 00:11:00,830 --> 00:11:01,110 10. 151 00:11:02,769 --> 00:11:06,009 No sabéis por dónde moveros. 152 00:11:06,710 --> 00:11:09,169 Me costaría a mí programar el printerln. 153 00:11:09,649 --> 00:11:10,450 Yo no lo sé hacer. 154 00:11:10,590 --> 00:11:13,269 Si ahora me siento aquí y digo, programa el printerln, no lo sé hacer. 155 00:11:13,269 --> 00:11:15,190 ¿Por qué? Porque uso el que ya me han dado hecho. 156 00:11:15,190 --> 00:11:26,070 vale entonces después de todo esto bla bla bla bla bla de repaso y de inicio vamos a ver el tema 157 00:11:26,070 --> 00:11:35,029 nuevo el tema nuevo pilla como base lo que hemos visto de objetos y clases y añade un nuevo 158 00:11:35,029 --> 00:11:41,529 concepto vale este nuevo concepto es un concepto muy potente no es difícil de entender pero es muy 159 00:11:41,529 --> 00:11:48,490 potente me da me abre a la posibilidad de hacer cosas bastante avanzadas vale es una de las 160 00:11:48,490 --> 00:11:54,669 características base de la programación orientada a objetos todos los lenguajes que sean orientada 161 00:11:54,669 --> 00:12:06,360 a objetos tienen este mecanismo dentro vale Java lo tiene C++ lo tiene Python lo tendrá vale 162 00:12:06,360 --> 00:12:13,159 El concepto es que es una cosa general, nosotros la vemos aplicada a Java, pero no es que es solo de Java. 163 00:12:16,629 --> 00:12:21,450 Es un mecanismo fundamentalmente para la reutilización del software. 164 00:12:21,649 --> 00:12:28,970 Nosotros, cuando hablamos de programación orientada a objetos, ya hablamos de esto, de reutilizar el código. 165 00:12:29,309 --> 00:12:32,190 Era una de las cosas importantes de la programación orientada a objetos. 166 00:12:32,190 --> 00:12:45,990 Yo me creaba el objeto, modelizarlo como persona, y en todos los sistemas que yo creo en un futuro, este código lo podría reutilizar, si me vale ese modelo de persona. 167 00:12:46,330 --> 00:12:51,769 Obviamente, si el modelo de persona tiene que ser distinto, tiene que tener cosas distintas, tenía un problema, tenía que rehacerlo. 168 00:12:51,769 --> 00:13:12,769 Pero aún así, si yo, en mi empresa, que gestiona determinadas cosas, me he creado un modelo de persona, lo más probable es que todos los sistemas de mi empresa, ese modelo de persona le valga, ¿vale? Porque cuando lo he creado, lo he creado según el problema o según los problemas que gestiona mi empresa, ¿sí? 169 00:13:12,769 --> 00:13:20,330 entonces y hacia estas clases y luego esta clase la podía importar o copiar en otros proyectos y 170 00:13:20,330 --> 00:13:24,889 tenerlas allí vale él le utilizaba el código utilizar el código es muy importante de hecho 171 00:13:24,889 --> 00:13:29,450 nosotros estamos reutilizando el código constantemente cuando usamos println estamos 172 00:13:29,450 --> 00:13:35,809 utilizando el código estamos pillando la base de java la estamos importando en nuestro programa y 173 00:13:35,809 --> 00:13:44,090 Ahora mi programa también usa el PrintWriter, el objeto que tiene dentro el println. 174 00:13:44,710 --> 00:13:51,649 Y el escáner, nosotros no hemos creado el escáner, el escáner lo reutilizamos toda la vez que queremos leer de teclado, 175 00:13:52,129 --> 00:13:59,929 pillando una clase que alguien más ha desarrollado, la importo en mi proyecto y la uso. 176 00:13:59,929 --> 00:14:02,070 ¿Sí? Ok. 177 00:14:02,649 --> 00:14:03,649 ¿Qué pasa 178 00:14:03,649 --> 00:14:06,090 si yo 179 00:14:06,090 --> 00:14:08,529 esta persona que importo, 180 00:14:08,610 --> 00:14:10,269 o sea, esta clase de persona que ya tengo 181 00:14:10,269 --> 00:14:12,090 creado, ha hecho un nuevo sistema? 182 00:14:12,269 --> 00:14:14,330 Quiero utilizar la persona, pero la persona 183 00:14:14,330 --> 00:14:16,250 no es suficiente, 184 00:14:16,490 --> 00:14:17,990 no es... 185 00:14:17,990 --> 00:14:19,929 Me vale, porque es un concepto 186 00:14:19,929 --> 00:14:21,850 básico de persona, me vale, pero 187 00:14:21,850 --> 00:14:23,669 necesito algo más. 188 00:14:24,669 --> 00:14:26,389 Puedo aplicar 189 00:14:26,389 --> 00:14:28,029 esto de la herencia. 190 00:14:28,029 --> 00:14:38,230 Es decir, yo puedo crear una clase que herede de otra clase, una clase que extienda una clase ya existente. 191 00:14:38,929 --> 00:14:55,759 Por ejemplo, si yo tuviera ya hecho la clase persona, la clase persona que tiene un nombre y una edad, y eso me vale, eso es la definición básica de una persona, 192 00:14:55,759 --> 00:14:59,639 y quisiera hacer una escuela, por ejemplo, creo que sí, 193 00:15:00,419 --> 00:15:04,279 pues la persona a sí mismo no me valdría, ¿vale? 194 00:15:04,279 --> 00:15:08,679 Porque dentro de una escuela hay también profesores y hay también estudiantes 195 00:15:08,679 --> 00:15:10,960 y necesitaría algo más. 196 00:15:11,379 --> 00:15:13,179 O sea, la persona sola no tiene notas. 197 00:15:13,379 --> 00:15:17,480 Entonces, ¿cómo hago luego a gestionar las notas de un alumno? 198 00:15:17,480 --> 00:15:21,340 Una persona sola no tiene las materias que imparte. 199 00:15:21,539 --> 00:15:23,700 Por lo tanto, ¿cómo hago en persona a ponerse? 200 00:15:23,700 --> 00:15:33,120 Lo que puede hacer es crear una nueva clase completamente por otro lado, que sea profesor, que tenga dentro nombre, tenga dentro edad, etc. 201 00:15:33,440 --> 00:15:38,240 Pero no estoy reutilizando el código, estoy haciendo otra vez un trabajo que ya he hecho. 202 00:15:38,659 --> 00:15:48,820 Debería reimplementar todo lo que hace una persona, que es tener su nombre, tener su edad, para presentarse, decir cuántos años tiene, respirar, qué sé yo. 203 00:15:48,820 --> 00:15:55,000 y además añadirle todo lo que puede hacer un profesor, o sea, añadirle una materia, 204 00:15:55,000 --> 00:16:02,820 imparte una materia, hora de clase, qué sé yo. Y luego debería ir al estudiante y decir, 205 00:16:02,820 --> 00:16:07,299 ok, vuelve a rehacer todo lo que has hecho de persona, o sea, ponerle el nombre, ponerle la 206 00:16:07,299 --> 00:16:12,100 edad, poner cualquier ser presente, poner que diga otra cosa, y además poner todo lo típico 207 00:16:12,100 --> 00:16:19,179 del estudiante. Esto, dices, pero a ver, lo hago una vez, ya lo tengo solucionado. Pero tened en 208 00:16:19,179 --> 00:16:24,519 cuenta que tiene siempre el problema que si ahora yo me doy cuenta que hay un error en el método de 209 00:16:24,519 --> 00:16:31,240 saludar o que quiero añadir otra cosa que hace todas las personas, tendré que tocar todas las 210 00:16:31,240 --> 00:16:38,340 clases que he creado, como hemos dicho antes. O sea, debería ir al profesor y modificar el saludar. 211 00:16:38,340 --> 00:16:43,460 Debería ir al estudiante, modificar, ir al mecánico, ir al doctor y modificar. 212 00:16:44,159 --> 00:16:47,179 Eso es poco manejable. 213 00:16:47,460 --> 00:16:52,159 Es lo que pasaba en un cierto sentido antes de la orientación a objetos. 214 00:16:53,500 --> 00:16:58,100 Y era razón porque cuando se llegaba a determinados sistemas muy complejos, 215 00:16:58,500 --> 00:17:00,440 pues el sistema se hundía. 216 00:17:01,580 --> 00:17:03,379 Entonces, ¿cómo funciona la herencia? 217 00:17:03,539 --> 00:17:05,380 La herencia funciona que yo me creo persona. 218 00:17:05,940 --> 00:17:07,460 Le pongo todo lo que es una persona. 219 00:17:07,460 --> 00:17:16,240 Y cuando voy a crear profesor, en vez de empezar desde cero, le digo, oye profesor, tú heredas de persona. 220 00:17:16,799 --> 00:17:21,559 Tú eres una persona. Tú extendes la clase persona. 221 00:17:22,160 --> 00:17:26,180 Y todo lo que está en persona, mágicamente, está también en profesor. 222 00:17:26,740 --> 00:17:28,480 Sin necesidad que yo lo descrita. 223 00:17:28,480 --> 00:17:31,319 añado en profesor 224 00:17:31,319 --> 00:17:32,779 solo la parte 225 00:17:32,779 --> 00:17:35,220 extra que caracteriza 226 00:17:35,220 --> 00:17:37,099 el profesor con respecto 227 00:17:37,099 --> 00:17:37,619 a persona 228 00:17:37,619 --> 00:17:39,660 ¿se entiende? 229 00:17:40,859 --> 00:17:43,359 ahora cuando hago estudiante o alumno 230 00:17:43,359 --> 00:17:44,759 hago lo mismo, le digo 231 00:17:44,759 --> 00:17:47,039 oye mira, tú eres una persona, tienes todo 232 00:17:47,039 --> 00:17:49,440 lo que tiene una persona, pero además 233 00:17:49,440 --> 00:17:50,259 tienes 234 00:17:50,259 --> 00:17:53,220 tus notas, tienes la posibilidad de estudiar 235 00:17:53,220 --> 00:17:55,059 tienes hacer 236 00:17:55,059 --> 00:17:56,400 un examen, no lo sé 237 00:17:56,400 --> 00:18:02,819 toda la característica propia del estudiante. Entonces ahora lo que es un estudiante no está 238 00:18:02,819 --> 00:18:08,579 definido en una clase sola, está definido en dos clases. Está definido en estudiante con las cosas 239 00:18:08,579 --> 00:18:13,079 particulares del estudiante y luego en persona porque está heredando todo lo que es una persona. 240 00:18:13,839 --> 00:18:20,740 Si ahora me doy cuenta que en persona el método saludar está mal, me voy a la clase persona, 241 00:18:20,740 --> 00:18:22,279 lo modifico en persona 242 00:18:22,279 --> 00:18:25,420 y en automático todas las clases 243 00:18:25,420 --> 00:18:26,880 que heredan de persona 244 00:18:26,880 --> 00:18:28,539 han solucionado este problema. 245 00:18:31,539 --> 00:18:32,079 ¿Entiendes? 246 00:18:33,940 --> 00:18:34,660 Útil. 247 00:18:35,440 --> 00:18:35,980 Mucho. 248 00:18:36,579 --> 00:18:37,039 Potente. 249 00:18:37,680 --> 00:18:37,839 ¿Vale? 250 00:18:38,200 --> 00:18:38,819 ¿Concepto? 251 00:18:39,180 --> 00:18:39,859 Sencillo. 252 00:18:40,259 --> 00:18:41,319 Si tengo ya persona, 253 00:18:41,720 --> 00:18:43,700 ¿por qué duplicar mil veces 254 00:18:43,700 --> 00:18:45,119 el concepto de persona? 255 00:18:45,579 --> 00:18:47,519 Pues lo tengo, lo tengo definido 256 00:18:47,519 --> 00:18:49,539 y lo tengo allí para... 257 00:18:49,539 --> 00:18:52,839 Si tengo que especificar más algo, 258 00:18:52,940 --> 00:18:56,980 Pues simplemente lo que hago es crearme una nueva clase que herede de personas. 259 00:18:57,319 --> 00:19:06,740 Oye, y si yo quisiera hacer, no lo sé, un profesor particular, un profesor catedrático, ¿vale? 260 00:19:07,160 --> 00:19:09,380 Que es un profesor, pero que tiene algo más. 261 00:19:10,380 --> 00:19:10,799 ¿Qué haría? 262 00:19:18,890 --> 00:19:26,769 O sea, que haría una clase, profesor catedrático, que extende profesor, que hereda profesor. 263 00:19:26,769 --> 00:19:31,450 El profesor hereda a la persona, por lo tanto, esto de aquí está heredando todas estas cosas. 264 00:19:33,210 --> 00:19:33,430 ¿Entiendes? 265 00:19:34,029 --> 00:19:39,160 Solo sería necesario ponerle... 266 00:19:39,160 --> 00:19:41,740 Es que profesor, porque profesor hereda a la persona. 267 00:19:43,740 --> 00:19:51,910 Tened en cuenta que, y esto sí es propio de Java, Java puede heredar de una sola clase. 268 00:19:52,390 --> 00:19:56,430 En realidad siempre hereda de dos, o sea, siempre hereda de una y puede heredar de otra. 269 00:19:57,089 --> 00:19:57,369 ¿Vale? 270 00:19:57,910 --> 00:20:00,789 Pero no se puede hacer herencia múltiple. 271 00:20:00,789 --> 00:20:05,869 No puedo decir que el profesor hereda de persona y hereda de ser humano. 272 00:20:06,490 --> 00:20:08,069 O uno u otro. 273 00:20:09,369 --> 00:20:11,509 Por eso los profesores no somos seres humanos. 274 00:20:12,730 --> 00:20:12,930 ¿Vale? 275 00:20:13,470 --> 00:20:14,009 Una pregunta. 276 00:20:14,930 --> 00:20:17,369 Cuando tú heredas, heredas todas las funciones. 277 00:20:17,809 --> 00:20:19,690 No puedes ser específico. 278 00:20:20,369 --> 00:20:21,789 No, heredas todo. 279 00:20:22,490 --> 00:20:22,750 ¿Vale? 280 00:20:22,930 --> 00:20:27,470 Lo que puedes hacer es modificar el funcionamiento de una de las funciones. 281 00:20:27,470 --> 00:20:37,289 Tened en cuenta que la relación que se crea con la herencia es la relación de es un. 282 00:20:37,950 --> 00:20:40,369 O sea, un profesor es una persona. 283 00:20:40,849 --> 00:20:43,250 Entonces, es obvio que tenga que hacer todo lo que te hace una persona. 284 00:20:43,430 --> 00:20:45,730 Porque tú eres una persona. 285 00:20:46,569 --> 00:20:48,869 A partir de allí puedes también hacer algo más. 286 00:20:48,869 --> 00:20:50,009 Pero eres una persona. 287 00:20:50,410 --> 00:20:53,710 Y allá donde se pueda usar una persona, se podrá usar un profesor. 288 00:20:54,329 --> 00:20:55,309 Porque es una persona. 289 00:20:57,539 --> 00:20:57,700 ¿Ok? 290 00:20:58,980 --> 00:21:04,720 En algunos lenguajes de programación, como por ejemplo C++, se permite herencia múltiple. 291 00:21:05,799 --> 00:21:09,240 ¿No es que la herencia se hereda de uno solo? Pues no. 292 00:21:09,720 --> 00:21:16,279 Hay lenguajes de programación que permiten herencia múltiple, hay lenguajes de programación que no lo permiten. 293 00:21:16,819 --> 00:21:25,079 Aquí veremos que se soluciona parcialmente este problema con el concepto de interfaz, pero todavía no estamos ahí. 294 00:21:25,079 --> 00:21:40,279 ¿Vale? Entonces, siempre si heredo, heredo de una cosa sola. En realidad, heredo de dos. ¿Vale? Porque cualquier clase que hayáis hecho vosotros hasta ahora, siempre ha usado este mecanismo. Siempre ha extendido otra clase. 295 00:21:40,279 --> 00:21:49,099 Vosotros no lo sabéis, o mejor, lo sospecháis, pero nunca lo habéis escrito, nunca habéis formalizado que eso existe. 296 00:21:49,519 --> 00:22:03,390 Y la clase que todos los objetos extenden, que heredan de esa clase todos los objetos que habéis creado vosotros es Object. 297 00:22:04,970 --> 00:22:10,329 La clase Object es la clase principal, fundamental. 298 00:22:10,329 --> 00:22:12,690 cualquier clase 299 00:22:12,690 --> 00:22:14,589 que vosotros habéis hecho hasta ahora 300 00:22:14,589 --> 00:22:16,509 siempre ha heredado de esta clase. 301 00:22:17,170 --> 00:22:18,710 De hecho, vosotros podéis utilizar 302 00:22:18,710 --> 00:22:19,950 el toString, ¿os acordáis? 303 00:22:20,549 --> 00:22:22,109 Hemos visto este toString, que 304 00:22:22,109 --> 00:22:24,569 escribí hasta hace... ¿Este toString dónde está 305 00:22:24,569 --> 00:22:26,269 definido? Pues en la clase object. 306 00:22:26,849 --> 00:22:28,329 Porque lo que has creado tú 307 00:22:28,329 --> 00:22:30,569 es un object. Y puede 308 00:22:30,569 --> 00:22:31,930 usar todos los métodos de object. 309 00:22:33,549 --> 00:22:34,869 ¿Eh? Lo veremos, ¿eh? 310 00:22:34,930 --> 00:22:36,769 Volvemos a ver. Queda claro por ahora 311 00:22:36,769 --> 00:22:38,369 esto, solo esta transparencia, ¿vale? 312 00:22:38,369 --> 00:22:42,130 permite, la herencia me permite definir una clase 313 00:22:42,130 --> 00:22:45,990 y a partir de esta clase extenderla con nuevas clases 314 00:22:45,990 --> 00:22:50,210 que heredan todas las características y métodos 315 00:22:50,210 --> 00:22:54,029 de la clase, digamos, superclase o clase padre 316 00:22:54,029 --> 00:22:57,390 o clase progenitor o clase por arriba, no lo sé 317 00:22:57,390 --> 00:23:01,950 ¿Cuándo 318 00:23:01,950 --> 00:23:06,150 se usa la herencia? ¿Cómo 319 00:23:06,150 --> 00:23:14,529 se usa la herencia cuando nos viene bien vale hay dos formas fundamentales de trabajar con la 320 00:23:14,529 --> 00:23:19,769 herencia lo que es la especialización en la generalización especialización es cuando yo 321 00:23:19,769 --> 00:23:28,950 tengo ya una clase la clase vehículo y quiero crear algo más específico o la clase persona 322 00:23:28,950 --> 00:23:35,930 quiero crear una profesión la clase vehículo y quiero crear un coche la clase fruta y quiero 323 00:23:35,930 --> 00:23:37,329 crear una manzana. 324 00:23:38,549 --> 00:23:39,849 ¿Sí? Entonces, yo 325 00:23:39,849 --> 00:23:41,529 tengo ya una clase hecha 326 00:23:41,529 --> 00:23:43,750 que me da las características 327 00:23:43,750 --> 00:23:45,470 típicas 328 00:23:45,470 --> 00:23:47,710 de ese objeto. ¿Vale? 329 00:23:48,130 --> 00:23:49,609 Pero para mí no son 330 00:23:49,609 --> 00:23:51,730 suficientes. Necesito 331 00:23:51,730 --> 00:23:53,589 algo más, porque lo que quiero 332 00:23:53,589 --> 00:23:55,750 modelizar tiene un poquito 333 00:23:55,750 --> 00:23:56,650 más que eso. 334 00:23:57,849 --> 00:23:59,230 ¿Sí? Tengo la persona. 335 00:23:59,789 --> 00:24:01,769 A mí me vale toda la característica de persona, 336 00:24:01,950 --> 00:24:03,450 el nombre, el apellido, 337 00:24:03,670 --> 00:24:05,410 el DNI, la dirección, 338 00:24:05,410 --> 00:24:08,789 Pero además quiero que pueda impartir asignaturas 339 00:24:08,789 --> 00:24:10,589 Entonces le tengo que añadir todo esto 340 00:24:10,589 --> 00:24:13,450 Esta sería una especialización 341 00:24:13,450 --> 00:24:14,250 ¿Vale? 342 00:24:14,690 --> 00:24:17,089 Escenario, tenemos que desarrollar una nueva clase 343 00:24:17,089 --> 00:24:18,930 Que se parece mucho a una que tenemos 344 00:24:18,930 --> 00:24:21,029 Pero necesita información 345 00:24:21,029 --> 00:24:23,670 Tanto como características como comportamientos 346 00:24:23,670 --> 00:24:26,369 O sea, métodos y atributos adicional 347 00:24:26,369 --> 00:24:27,210 ¿Vale? 348 00:24:27,670 --> 00:24:29,690 Por lo tanto, hago una subclase 349 00:24:29,690 --> 00:24:30,390 ¿Sí? 350 00:24:31,130 --> 00:24:33,369 Subclase, clase hija o clase derivada 351 00:24:33,369 --> 00:24:34,109 Pues lo mismo 352 00:24:34,829 --> 00:24:38,950 Son formas distintas de decir una clase que hereda de otra. 353 00:24:40,230 --> 00:24:45,490 Creamos una clase derivada y añadimos nuevas funcionalidades sin tener que describir código común. 354 00:24:45,849 --> 00:24:47,349 Lo que hemos hecho antes en el ejemplo. 355 00:24:48,369 --> 00:24:53,869 Tengo persona, entonces digo, oye, mira, quiero hacer un profesor, pues extendo profesor. 356 00:24:54,049 --> 00:24:55,130 Esta es especificación. 357 00:24:55,769 --> 00:24:59,150 Oye, ¿tengo que decir también estudiante? Pues especifico profesor. 358 00:25:00,130 --> 00:25:02,309 La segunda opción es la generalización. 359 00:25:02,309 --> 00:25:11,309 O sea, que yo me doy cuenta que he hecho un programa, he hecho un sistema, y que tengo varias clases, y me doy cuenta que muchas de estas clases tienen algo en común. 360 00:25:13,630 --> 00:25:17,329 Imaginaos una situación parecida a esta donde no está persona. 361 00:25:17,809 --> 00:25:21,309 Yo tengo una escuela donde me ha hecho persona, profesor y estudiante. 362 00:25:22,250 --> 00:25:25,849 Y veo que profesor tiene nombre, apellido, no sé qué, no sé cuánto. 363 00:25:25,910 --> 00:25:28,230 Y estudiante tiene nombre, apellido, no sé qué, no sé cuánto. 364 00:25:28,349 --> 00:25:29,430 Y no lo sé. 365 00:25:29,950 --> 00:25:32,390 El conserje tiene nombre, apellido, no sé qué, no sé cuánto. 366 00:25:32,650 --> 00:25:36,470 Me doy cuenta que hay cosas que se repiten mucho en mis clases. 367 00:25:37,049 --> 00:25:38,210 Entonces puedo decir, vale, espera. 368 00:25:38,829 --> 00:25:41,390 Lo que hago es una reingenierización de mi sistema. 369 00:25:42,150 --> 00:25:46,089 Pillo las partes comunes de las clases que tengo por debajo 370 00:25:46,089 --> 00:25:49,390 y me creo una superclase, ¿vale? 371 00:25:49,410 --> 00:25:52,750 Una clase para arriba que tenga esta parte común de todos. 372 00:25:53,289 --> 00:25:56,490 De esta forma, soluciono el problema que decía antes. 373 00:25:56,490 --> 00:25:58,549 si tengo que hacer una modificación para que 374 00:25:58,549 --> 00:26:00,670 mejore la eficiencia 375 00:26:00,670 --> 00:26:01,990 para que solucione un problema 376 00:26:01,990 --> 00:26:05,009 a una de estas cosas no la tengo que hacer en todas las clases 377 00:26:05,009 --> 00:26:06,430 me la hago solo en la superclase 378 00:26:06,430 --> 00:26:08,309 y las clases que heredan 379 00:26:08,309 --> 00:26:10,710 lo adquieren directamente 380 00:26:10,710 --> 00:26:11,890 ¿sí? 381 00:26:12,430 --> 00:26:14,569 entonces, ¿qué escenario? 382 00:26:15,029 --> 00:26:15,549 tengo 383 00:26:15,549 --> 00:26:18,430 coche, tren 384 00:26:18,430 --> 00:26:20,670 bicicleta y 385 00:26:20,670 --> 00:26:22,809 avión, todos son 386 00:26:22,809 --> 00:26:24,710 vehículos, los tengo ya hechos 387 00:26:24,710 --> 00:26:31,630 y me doy cuenta que todos tienen velocidad máxima, todos tienen, no lo sé, kilómetros recorridos. 388 00:26:32,309 --> 00:26:39,089 Vale, entonces estos los saco de todas estas clases y los pongo en una superclase genérica que es vehículo 389 00:26:39,089 --> 00:26:42,210 y haré que todas estas hereden de vehículo. 390 00:26:43,730 --> 00:26:44,930 ¿Sí? ¿Se entiende ya? 391 00:26:45,950 --> 00:26:50,089 Tenemos un conjunto numeroso de clases muy similares, con códigos que se repiten 392 00:26:50,089 --> 00:26:54,589 y es difícil de actualizar y mantener porque cada vez que lo mantengo tengo que tocarlo en todas las cosas. 393 00:26:54,710 --> 00:26:59,170 Pues movemos el código que se repite en un único sitio, creando una frase pago. 394 00:27:00,029 --> 00:27:00,470 ¿Dudas? 395 00:27:06,109 --> 00:27:09,289 Ejemplo más práctico, ¿vale? 396 00:27:09,490 --> 00:27:15,029 Entonces, imaginaos que yo tenga recurso, aula y ordenador, ¿vale? 397 00:27:15,509 --> 00:27:23,470 Recurso es un recurso genérico, aula es un aula, ordenador es uno de nuestros ordenadores, ¿vale? 398 00:27:23,529 --> 00:27:24,789 En una escuela o lo que sea. 399 00:27:24,789 --> 00:27:30,210 Veo que un recurso en general tiene un nombre, descripción, decir nombre, decir descripción, ¿vale? 400 00:27:30,369 --> 00:27:32,369 Sus atributos y sus métodos. 401 00:27:32,369 --> 00:27:41,529 Y veo que un aula tiene un nombre, una descripción también, tiene una localización, tiene un decir localización, tiene también un decir nombre, un decir descripción, ¿vale? 402 00:27:42,029 --> 00:27:45,910 Sin embargo, el ordenador tiene igualmente un nombre que será un identificador, ¿vale? 403 00:27:45,910 --> 00:27:48,930 La descripción, el sistema operativo que tiene, etcétera, etcétera. 404 00:27:49,269 --> 00:27:54,410 Me doy cuenta que la parte azul se repite, ¿vale? 405 00:27:54,410 --> 00:27:56,230 Es la misma en todos los recursos. 406 00:27:57,009 --> 00:28:03,450 Entonces, en un cierto sentido, a nivel de generalización, digo, vale, esta la saco de aquí 407 00:28:03,450 --> 00:28:13,509 y la pongo en una superclase genérica de curso y hago que desde recurso herede tanto aula como ordenador. 408 00:28:13,829 --> 00:28:16,670 Porque los dos son, en general, recursos de la escuela. 409 00:28:17,089 --> 00:28:23,450 No será un recurso espacial, un recurso más físico, pero los dos son recursos a que la escuela pueda acceder, ¿vale? 410 00:28:24,410 --> 00:28:31,450 Entonces, la parte común se quedará en recurso con su definición de atributos y su definición de métodos. 411 00:28:32,609 --> 00:28:40,289 Aula heredará de recurso, por lo tanto tiene ya estas cosas y además añadirá la parte que era específica del aula. 412 00:28:41,410 --> 00:28:48,529 Ordenador heredará de recurso, por lo tanto tendrá toda la parte azul y además añadirá la parte específica del recurso. 413 00:28:50,049 --> 00:28:51,809 ¿Cómo se declararía esta? 414 00:28:51,809 --> 00:28:54,470 cuando yo creo la clase aula 415 00:28:54,470 --> 00:28:56,589 public class aula 416 00:28:56,589 --> 00:28:57,910 extends 417 00:28:57,910 --> 00:28:59,089 recurso 418 00:28:59,089 --> 00:29:01,430 esta es una palabra reservada 419 00:29:01,430 --> 00:29:03,529 extends, que me define que 420 00:29:03,529 --> 00:29:05,650 esta clase extiende 421 00:29:05,650 --> 00:29:08,130 otra clase, que esta clase hereda 422 00:29:08,130 --> 00:29:10,109 de otra clase, que esta es una subclase 423 00:29:10,109 --> 00:29:10,910 de la otra clase 424 00:29:10,910 --> 00:29:12,950 entonces 425 00:29:12,950 --> 00:29:15,849 mientras aquí sería public class recurso 426 00:29:15,849 --> 00:29:18,089 public class aula, public class ordenador 427 00:29:18,089 --> 00:29:19,549 con un código que se repite 428 00:29:19,549 --> 00:29:23,009 Aquí tendría una public class recurso, definición, 429 00:29:23,329 --> 00:29:26,210 y luego tendría public class aula, extend recurso, 430 00:29:26,630 --> 00:29:31,750 extends recurso, y public class ordenador, extends recurso. 431 00:29:33,170 --> 00:29:33,589 Papi. 432 00:29:35,029 --> 00:29:35,150 ¿Sí? 433 00:29:36,890 --> 00:29:37,930 Bla, bla, bla, bla, bla. 434 00:29:42,000 --> 00:29:44,420 ¿Cómo se dice? 435 00:29:45,259 --> 00:29:46,279 Nombres, ¿vale? 436 00:29:46,279 --> 00:29:51,519 Para entendernos, sinónimos, para entender cuando hablamos de herencia, ¿vale? 437 00:29:51,519 --> 00:30:02,039 Si definimos la clase taxi a partir de la clase vehículo, entonces tenemos vehículos y tenemos taxi que hereda de vehículo, podemos decir las siguientes cosas. 438 00:30:03,039 --> 00:30:06,519 Que taxi hereda las variables y métodos de vehículo. 439 00:30:07,339 --> 00:30:08,599 Esto es correcto. 440 00:30:09,599 --> 00:30:11,740 Taxi extiende vehículo. 441 00:30:12,660 --> 00:30:13,259 Perfecto. 442 00:30:13,980 --> 00:30:16,220 Taxi es subclase de vehículo. 443 00:30:16,819 --> 00:30:17,500 Correcto. 444 00:30:17,500 --> 00:30:26,920 taxi es su clase derivada o clase hija de vida. Se puede decir también que taxi hereda directamente el vehículo, perfecto, ¿vale? 445 00:30:27,680 --> 00:30:37,259 En vez de, al revés, pues vehículo es superclase de taxi, o vehículo es clase base de taxi, ¿vale? 446 00:30:37,259 --> 00:30:47,000 Clase base quiere decir que es la que está para arriba en la jerarquía, ¿vale? O clase padre, clase madre, clase lo que queráis, ¿vale? De taxi. 447 00:30:47,500 --> 00:30:53,220 La herencia realiza, la relación es un, ¿vale? Eso es importante porque eso se olvida. 448 00:30:54,079 --> 00:30:58,940 Una cosa de abajo que hereda algo de arriba, una subclase que hereda de una superclase, 449 00:30:59,420 --> 00:31:02,240 la subclase es una superclase. 450 00:31:03,079 --> 00:31:06,640 Si yo tengo un taxi que hereda de vehículo, el taxi es un vehículo. 451 00:31:07,859 --> 00:31:11,579 Un objeto taxi es también un objeto vehículo. 452 00:31:12,359 --> 00:31:18,019 Si yo tengo un método que recibe como parámetro un objeto vehículo, le puedo pasar un taxi. 453 00:31:20,509 --> 00:31:21,250 Al revés, no. 454 00:31:22,869 --> 00:31:24,269 Vehículo no es un taxi. 455 00:31:25,170 --> 00:31:30,589 Si yo tengo un método que necesita un objeto taxi, no le puedo pasar un vehículo. 456 00:31:31,190 --> 00:31:32,009 ¿Lo veis por qué? 457 00:31:37,740 --> 00:31:40,980 Pillamos un método que pilla un objeto vehículo. 458 00:31:41,680 --> 00:31:44,180 Pilla un objeto vehículo y hace algo con ese vehículo. 459 00:31:44,180 --> 00:31:48,279 Pues usará todo lo que viene en un objeto vehículo. 460 00:31:48,380 --> 00:31:54,640 Por ejemplo, podría hacer getMatricula, podría hacer getModelo, que son métodos de vehículo. 461 00:31:55,180 --> 00:31:58,960 Si yo en vez de un vehículo le paso un taxi, el taxi lo tiene getModelo. 462 00:32:00,099 --> 00:32:01,720 Sí, lo tiene getMatricula. 463 00:32:02,359 --> 00:32:08,180 Sí, por lo tanto, pasar un taxi en un sitio donde se usa un vehículo no tiene problema 464 00:32:08,180 --> 00:32:13,099 porque todos los métodos que puedo pedir a un vehículo, el taxi los tendrá. 465 00:32:13,099 --> 00:32:14,640 tendrá algo más 466 00:32:14,640 --> 00:32:16,339 ¿sí? 467 00:32:16,960 --> 00:32:19,180 ahora, al revés, si yo tengo un método 468 00:32:19,180 --> 00:32:20,259 que me pilla un taxi 469 00:32:20,259 --> 00:32:22,880 pues quiere decir que este método podría utilizar 470 00:32:22,880 --> 00:32:24,859 por ejemplo set número licencia 471 00:32:24,859 --> 00:32:26,539 ¿sí? 472 00:32:27,339 --> 00:32:28,940 pero cuidado, que si yo ahora le paso 473 00:32:28,940 --> 00:32:30,900 un vehículo, vehículo puede hacer set 474 00:32:30,900 --> 00:32:32,200 set 475 00:32:32,200 --> 00:32:35,039 set número licencia 476 00:32:35,039 --> 00:32:36,779 no, porque no lo tiene 477 00:32:36,779 --> 00:32:39,119 entonces, un taxi 478 00:32:39,119 --> 00:32:41,160 es un vehículo, un vehículo no es 479 00:32:41,160 --> 00:32:45,849 un taxi, ¿se entiende? 480 00:32:45,950 --> 00:32:49,009 Un alumno es una persona. 481 00:32:49,289 --> 00:32:50,950 Una persona no es un alumno. 482 00:32:59,519 --> 00:33:02,819 Para sintaxis, ¿vale? 483 00:33:02,859 --> 00:33:05,180 En Java, para indicar que una clase hereda de otra, 484 00:33:05,279 --> 00:33:08,039 se emplea la palabra reservada, extends, ¿vale? 485 00:33:08,799 --> 00:33:11,180 Esto public o sin nada, lo que sea, 486 00:33:11,400 --> 00:33:14,279 clase hija, extends, clase public. 487 00:33:15,259 --> 00:33:17,859 ¿Extends sirve para hacer la superclase? 488 00:33:18,880 --> 00:33:20,619 No, la superclase no lo tiene. 489 00:33:21,359 --> 00:33:24,779 En este caso, por ejemplo, la clase padre no tendría nada. 490 00:33:25,559 --> 00:33:34,619 O, si hay varios niveles, yo puedo hacer taxi que estén de vehículo, que estén de objeto. 491 00:33:35,380 --> 00:33:40,680 Claro, pero si es el revés y tienes ya, por ejemplo, taxi y bus, 492 00:33:40,900 --> 00:33:45,619 tú dices que pueden tener cosas en común y ahí crear una superclase. 493 00:33:45,619 --> 00:33:52,440 Si solo tienes taxi y autobús, ¿cuál sería lo que necesitas para crear el vehículo? 494 00:33:54,240 --> 00:33:55,900 O sea, la generalización. 495 00:33:56,200 --> 00:33:59,700 Para hacer la generalización, taxi tendría también todas estas cosas. 496 00:34:00,380 --> 00:34:02,619 Y autobús tendría también todas estas cosas. 497 00:34:02,839 --> 00:34:06,380 Entonces son dos clases separadas que no extienden nada. 498 00:34:06,980 --> 00:34:10,300 Tú lo que harías es crearte una clase nueva que no extiende nada, 499 00:34:10,300 --> 00:34:13,519 vehículo, ponerla allí dentro 500 00:34:13,519 --> 00:34:15,039 la cosa en común de taxi 501 00:34:15,039 --> 00:34:17,780 y autobús, quitándola de taxi y autobús 502 00:34:17,780 --> 00:34:19,420 y a esta punta dirías que taxi 503 00:34:19,420 --> 00:34:21,539 extends vehículo y autobús 504 00:34:21,539 --> 00:34:22,960 extends vehículo. 505 00:34:23,320 --> 00:34:24,480 Igual son que extends. 506 00:34:26,139 --> 00:34:27,599 Eso, que tú 507 00:34:27,599 --> 00:34:29,360 lo hagas por generalización o lo hagas por 508 00:34:29,360 --> 00:34:31,000 especificación, es 509 00:34:31,000 --> 00:34:32,679 lo mismo. 510 00:34:33,380 --> 00:34:35,480 Es dos formas de verlas, es cuando se 511 00:34:35,480 --> 00:34:36,579 usa normalmente. 512 00:34:37,179 --> 00:34:39,559 Son los casos típicos de tú en un 513 00:34:39,559 --> 00:34:41,400 sistema, te das cuenta que antes de un momento 514 00:34:41,400 --> 00:34:42,500 ya tienes una 515 00:34:42,500 --> 00:34:45,739 clase y quieres hacer una especificación 516 00:34:45,739 --> 00:34:47,280 pues ahí usa la asistencia 517 00:34:47,280 --> 00:34:49,400 o que tú te das cuenta 518 00:34:49,400 --> 00:34:51,480 que ya he creado varias clases y todas 519 00:34:51,480 --> 00:34:53,320 tienen una parte en común, entonces dices 520 00:34:53,320 --> 00:34:54,280 vale, hago 521 00:34:54,280 --> 00:34:57,440 pero luego al final se te queda igual 522 00:34:57,440 --> 00:34:59,119 a nivel de código con este 523 00:34:59,119 --> 00:35:00,199 ¿sí? 524 00:35:02,909 --> 00:35:05,230 Regulación de clases derivadas, vale, entonces si yo tengo 525 00:35:05,230 --> 00:35:07,210 persona, por ejemplo, esta es public 526 00:35:07,210 --> 00:35:09,150 class persona, vale, porque es 527 00:35:09,150 --> 00:35:11,130 arriba, en realidad aquí estaría 528 00:35:11,130 --> 00:35:14,340 pero no lo ponemos 529 00:35:14,340 --> 00:35:16,559 extends object 530 00:35:16,559 --> 00:35:17,420 ¿vale? 531 00:35:17,519 --> 00:35:18,440 por defecto 532 00:35:18,440 --> 00:35:19,519 si tú no lo pones 533 00:35:19,519 --> 00:35:20,739 extends object 534 00:35:20,739 --> 00:35:21,679 ¿vale? 535 00:35:22,519 --> 00:35:23,579 entonces luego tengo 536 00:35:23,579 --> 00:35:24,360 empleado 537 00:35:24,360 --> 00:35:24,900 ¿vale? 538 00:35:25,019 --> 00:35:25,539 que extens... 539 00:35:25,539 --> 00:35:26,139 bueno, alumno 540 00:35:26,139 --> 00:35:27,639 que extens persona 541 00:35:27,639 --> 00:35:29,139 entonces un alumno 542 00:35:29,139 --> 00:35:29,940 es una persona 543 00:35:29,940 --> 00:35:30,619 ¿sí? 544 00:35:31,260 --> 00:35:32,300 luego tengo empleado 545 00:35:32,300 --> 00:35:33,440 que extens persona 546 00:35:33,440 --> 00:35:35,400 y luego tengo profesor 547 00:35:35,400 --> 00:35:36,659 que extens empleado 548 00:35:36,659 --> 00:35:37,400 ¿vale? 549 00:35:37,880 --> 00:35:38,659 entonces por ejemplo 550 00:35:38,659 --> 00:35:39,980 aquí le podría poner 551 00:35:39,980 --> 00:35:41,300 cuestiones de sueldo 552 00:35:41,300 --> 00:35:41,820 por ejemplo 553 00:35:41,820 --> 00:35:43,800 de cuánto sueldo tiene, si le pago 554 00:35:43,800 --> 00:35:45,760 el mes o cosas por el estilo, que un alumno 555 00:35:45,760 --> 00:35:46,940 no tiene, pero un profesor sí. 556 00:35:47,920 --> 00:35:50,059 Tened en cuenta que un profesor es un empleado 557 00:35:50,059 --> 00:35:51,639 que es una persona, por lo tanto 558 00:35:51,639 --> 00:35:53,539 el profesor también es una persona. 559 00:35:53,980 --> 00:35:55,679 Todo lo que puede hacer una persona lo puede hacer 560 00:35:55,679 --> 00:35:57,739 un profesor. Y todo lo que puede hacer una persona 561 00:35:57,739 --> 00:35:59,579 lo puede hacer también un alumno. 562 00:36:00,019 --> 00:36:02,019 Todo lo que puede hacer un empleado 563 00:36:02,019 --> 00:36:03,559 el alumno no lo puede hacer. 564 00:36:04,940 --> 00:36:06,019 Pero un profesor sí. 565 00:36:06,980 --> 00:36:08,000 Y una persona tampoco. 566 00:36:10,409 --> 00:36:10,710 ¿Está claro? 567 00:36:12,269 --> 00:36:13,309 A partir de aquí 568 00:36:13,309 --> 00:36:15,329 yo me hago toda la estructura 569 00:36:15,329 --> 00:36:17,550 que me da la gana, grande, compleja 570 00:36:17,550 --> 00:36:19,269 cuanto me da la gana, pero ten en cuenta 571 00:36:19,269 --> 00:36:21,530 que aquí hay siempre un nivel extra 572 00:36:21,530 --> 00:36:22,110 que es 573 00:36:22,110 --> 00:36:25,570 todo empieza siempre de 8 574 00:36:25,570 --> 00:36:27,829 entonces, el profesor es un 8 575 00:36:27,829 --> 00:36:29,489 si 576 00:36:29,489 --> 00:36:31,849 si, porque es un empleado 577 00:36:31,849 --> 00:36:33,329 que es una persona, que es un 8 578 00:36:33,329 --> 00:36:37,139 como decías 579 00:36:37,139 --> 00:36:39,420 que era directamente una subclase 580 00:36:39,420 --> 00:36:40,519 depende de solo 581 00:36:40,519 --> 00:36:42,099 superclase 582 00:36:42,099 --> 00:36:45,300 ¿Y cómo puede ser que dependa de los que es lo que habías dicho antes? 583 00:36:45,320 --> 00:36:45,980 No depende de los. 584 00:36:47,559 --> 00:36:48,880 Profesor depende de empleado. 585 00:36:49,400 --> 00:36:50,000 Vale, eso ya. 586 00:36:51,179 --> 00:36:53,079 Pero además de object, dices. 587 00:36:54,099 --> 00:36:59,500 Pero es que tú no estás diciendo que profesor depende de object y de empleado. 588 00:36:59,900 --> 00:37:03,960 Tú estás diciendo que depende de empleado, luego empleado de persona, persona de object. 589 00:37:04,460 --> 00:37:05,659 O sea, tú vas arrastrando. 590 00:37:06,340 --> 00:37:09,199 Pero no estás, o sea, vas escalón por escalón. 591 00:37:09,360 --> 00:37:11,079 Cada vez añades una cosa. 592 00:37:11,079 --> 00:37:14,280 Tú estás heredando y tirándote detrás todo. 593 00:37:15,780 --> 00:37:19,440 O sea, tú cuando creas persona estás traiendo todo lo de objeto. 594 00:37:19,579 --> 00:37:25,699 Y cuando ya creas empleado, estás traiendo todo lo de objeto y además todo lo de persona. 595 00:37:26,920 --> 00:37:29,159 Pero tú estás extendiendo una sola clase. 596 00:37:30,119 --> 00:37:35,579 No podrías extender persona y como empleado y también gestor sueldo. 597 00:37:35,579 --> 00:37:37,599 no puedes 598 00:37:37,599 --> 00:37:38,940 no puedes 599 00:37:38,940 --> 00:37:41,440 heredar de dos clases a la vez 600 00:37:41,440 --> 00:37:42,619 o las metes 601 00:37:42,619 --> 00:37:45,480 en orden, pero por ejemplo 602 00:37:45,480 --> 00:37:47,480 si yo tuviera aquí un gestor sueldo, que no sé 603 00:37:47,480 --> 00:37:49,300 quién es, pero para empleado, para gestor 604 00:37:49,300 --> 00:37:51,639 sueldo, gestor sueldo es una persona 605 00:37:51,639 --> 00:37:53,480 si no es 606 00:37:53,480 --> 00:37:54,920 una persona, no lo puedes poner aquí 607 00:37:54,920 --> 00:37:57,440 entonces ahí tendría un problema 608 00:37:57,440 --> 00:37:59,300 tendría un problema de tener que 609 00:37:59,300 --> 00:38:01,460 heredar de persona y heredar de esta 610 00:38:01,460 --> 00:38:03,420 otra clase, y no puedo 611 00:38:03,420 --> 00:38:10,420 Entonces, hay mecanismo para hacerlo. Sí, hay otras formas de hacerlo. 612 00:38:10,420 --> 00:38:19,070 ¿Dudas? ¿Dudas sobre esto? ¿Esto es sintaxis pura, fácil, con el sense? 613 00:38:19,070 --> 00:38:33,070 Entonces, una subclase, que es todo esto, es como si dentro tuviera un objeto de la superclase. 614 00:38:33,070 --> 00:38:41,949 Entonces, la clase alumno, que es todo esto, tiene dentro un objeto persona. 615 00:38:47,579 --> 00:38:52,159 ¿Por qué? Porque alumno extiende persona. 616 00:38:52,679 --> 00:39:04,579 Entonces es como si yo aquí dentro me creo una persona y luego a esta persona la extiendo con los datos y las características y los métodos típicos del alumno. 617 00:39:04,579 --> 00:39:13,119 Pero, y de hecho es así como se crea. Cuando yo creo un alumno, antes me creo una persona 618 00:39:13,119 --> 00:39:19,900 y a esta persona le añado todo lo del alumno. Por eso que, al fin y al cabo, si yo en un 619 00:39:19,900 --> 00:39:25,139 método estoy utilizando una persona, puedo tranquilamente utilizar un alumno porque dentro 620 00:39:25,139 --> 00:39:26,579 Tengo todo lo que es una persona. 621 00:39:29,590 --> 00:39:29,969 ¿Se entiende? 622 00:39:31,269 --> 00:39:31,869 Pudas. 623 00:39:33,329 --> 00:39:33,929 Pintas. 624 00:39:39,699 --> 00:39:42,739 Si os acordáis, cuando vimos los modificadores, 625 00:39:43,780 --> 00:39:46,340 estuvimos hablando de cuatro tipos de modificadores. 626 00:39:46,340 --> 00:39:51,260 Estaba private, estaba public, estaba protected, estaba packaged. 627 00:39:51,559 --> 00:39:52,199 O nada. 628 00:39:53,619 --> 00:39:57,199 Y protected nosotros decimos, esto no lo entendemos todavía, 629 00:39:57,400 --> 00:40:00,340 tenemos que saber qué es la herencia antes de poder entenderlo. 630 00:40:01,219 --> 00:40:02,739 Esta obra lo sabe, ¿vale? 631 00:40:03,079 --> 00:40:10,239 Cuando yo tengo protected, esto es, no es público, o sea, no es que cualquier clase pueda acceder a él, 632 00:40:10,239 --> 00:40:14,900 pero tampoco es privado, o sea, que sólo esa clase puede acceder a él. 633 00:40:15,059 --> 00:40:16,219 ¿Quién puede acceder? 634 00:40:16,579 --> 00:40:25,320 Puede acceder o clases que pertenecen al mismo package, o clases de package distintos, pero que hereden de esta clase. 635 00:40:29,320 --> 00:40:31,860 Entonces, tengo cuatro niveles de privacidad. 636 00:40:31,860 --> 00:40:35,039 private. Solo esta clase 637 00:40:35,039 --> 00:40:36,039 accede a estas variables. 638 00:40:36,619 --> 00:40:39,199 Fuera de esta clase, nadie puede acceder a estas variables. 639 00:40:39,639 --> 00:40:40,800 Para poder acceder a estas variables 640 00:40:40,800 --> 00:40:42,219 utilizaríamos 641 00:40:42,219 --> 00:40:44,760 getReceptor. 642 00:40:46,659 --> 00:40:47,960 Segundo estadio, 643 00:40:48,500 --> 00:40:49,739 que sería package. 644 00:40:51,519 --> 00:40:52,519 Package es 645 00:40:52,519 --> 00:40:54,880 todos los que están dentro 646 00:40:54,880 --> 00:40:56,920 del mismo package pueden acceder. 647 00:40:56,920 --> 00:40:59,119 Si tú estás fuera del package 648 00:40:59,119 --> 00:41:00,460 no puedes acceder a este estado. 649 00:41:01,860 --> 00:41:03,679 tercer nivel 650 00:41:03,679 --> 00:41:06,039 que sería protected 651 00:41:06,039 --> 00:41:08,679 que es, si tú perteneces al mismo 652 00:41:08,679 --> 00:41:10,920 package, puedes acceder 653 00:41:10,920 --> 00:41:12,340 pero además 654 00:41:12,340 --> 00:41:14,480 si tú eres de un package externo 655 00:41:14,480 --> 00:41:16,139 que con package 656 00:41:16,139 --> 00:41:18,619 con el modificador package no podrías 657 00:41:18,619 --> 00:41:20,559 ya acceder, pero resulta que 658 00:41:20,559 --> 00:41:22,739 tú extends esta clase 659 00:41:22,739 --> 00:41:24,059 entonces sí 660 00:41:24,059 --> 00:41:26,679 puedes acceder, o sea que si yo 661 00:41:26,679 --> 00:41:28,920 hago de la clase persona 662 00:41:28,920 --> 00:41:30,679 hago la clase alumno 663 00:41:30,679 --> 00:41:37,639 en un package distinto, ¿vale? Y este es protected desde este package distinto. Si alumno 664 00:41:37,639 --> 00:41:46,090 extensa persona puede acceder al nombre modificado. Y luego está public, que cualquiera puede 665 00:41:46,090 --> 00:41:51,250 atacar o puede acceder como le vaya. Da igual que esté en el mismo package, en packages 666 00:41:51,250 --> 00:41:54,570 distintos, cosas así. Public es peligroso. 667 00:41:55,949 --> 00:42:01,530 El tema del package private y todo lo demás, ¿sería único especialmente para que se puedan 668 00:42:01,530 --> 00:42:15,050 los estos cuatro modificadores son modificadores de visibilidad vale es 669 00:42:15,050 --> 00:42:22,570 sirve para gestionar quién y desde dónde se puede acceder a estas variables directamente 670 00:42:22,570 --> 00:42:31,849 normalmente para que te sirven los métodos más críticos de tu sistema no lo haces accesible 671 00:42:31,849 --> 00:42:33,250 por fuera, desde fuera. 672 00:42:33,969 --> 00:42:35,610 Si tú eres o somos 673 00:42:35,610 --> 00:42:37,489 un empresa, ¿vale? 674 00:42:37,710 --> 00:42:39,869 Desarrollamos el mismo sistema, pero cada uno 675 00:42:39,869 --> 00:42:41,130 se ocupa de un package, 676 00:42:42,090 --> 00:42:43,690 ¿vale? A lo mejor hay cosas 677 00:42:43,690 --> 00:42:45,750 que tú dices, vale, que toda la empresa acceda. 678 00:42:45,869 --> 00:42:47,550 O sea, hasta otros grupos de trabajo 679 00:42:47,550 --> 00:42:49,570 pueden acceder a esta variable porque es compartida 680 00:42:49,570 --> 00:42:50,909 entre todos, la usamos entre todos. 681 00:42:51,489 --> 00:42:53,469 Pero puede haber otras cosas que tú dices, 682 00:42:53,590 --> 00:42:55,349 no, esta es una cosa de mi 683 00:42:55,349 --> 00:42:57,849 departamento, del package 684 00:42:57,849 --> 00:42:59,289 que estoy desarrollando yo 685 00:42:59,289 --> 00:43:01,630 y quiero tener control 686 00:43:01,630 --> 00:43:03,449 sobre ella, no quiero que alguien venga afuera 687 00:43:03,449 --> 00:43:05,389 porque yo he asumido un cierto 688 00:43:05,389 --> 00:43:07,309 valor, he asumido ciertas características 689 00:43:07,309 --> 00:43:09,210 que si viene otro desde afuera 690 00:43:09,210 --> 00:43:10,949 y me la cambia como le da la gana, 691 00:43:11,309 --> 00:43:13,429 sin respetar estas reglas, posiblemente 692 00:43:13,429 --> 00:43:14,570 se carga el programa entero. 693 00:43:15,730 --> 00:43:17,329 Entonces, limito la 694 00:43:17,329 --> 00:43:17,929 accesibilidad. 695 00:43:19,449 --> 00:43:21,469 ¿A quién la limito? Pues si yo 696 00:43:21,469 --> 00:43:22,809 estoy desarrollando mi clase, 697 00:43:23,250 --> 00:43:25,230 porque dentro del package que somos nosotros, 698 00:43:25,349 --> 00:43:26,849 si yo tengo mi clase, él tiene su clase. 699 00:43:27,489 --> 00:43:29,389 Si yo ya con ellos he hablado, hemos hecho una 700 00:43:29,389 --> 00:43:31,230 cosa así, de que todos tienen que utilizar 701 00:43:31,230 --> 00:43:33,230 mi variable, pero dentro del package 702 00:43:33,230 --> 00:43:35,269 tiene que ser visible, pues le pongo 703 00:43:35,269 --> 00:43:36,070 package. 704 00:43:37,929 --> 00:43:38,829 Si yo estoy, 705 00:43:39,190 --> 00:43:41,550 es una variable que solo depende de mi clase 706 00:43:41,550 --> 00:43:43,429 y que no quiero que otros lo toquen, 707 00:43:43,550 --> 00:43:44,449 pues le pongo private. 708 00:43:44,989 --> 00:43:47,230 Entonces yo estoy seguro que yo puedo hacer lo que me da la gana, 709 00:43:47,489 --> 00:43:49,070 o sea, puedo asumir lo que me da la gana porque soy 710 00:43:49,070 --> 00:43:50,489 solo yo que estoy trabajando sobre eso. 711 00:43:50,489 --> 00:43:52,889 Si él intenta atacarla y cambiarla, 712 00:43:53,469 --> 00:43:54,469 o le he hecho un setter 713 00:43:54,469 --> 00:43:56,949 o un getter, entonces si yo allí he comprobado 714 00:43:56,949 --> 00:43:58,909 que sean datos correctos, 715 00:43:58,949 --> 00:44:00,550 ¿vale? O si no, él no puede hacer 716 00:44:00,550 --> 00:44:03,449 hasta si está en mi mismo grupo de trabajo 717 00:44:03,449 --> 00:44:04,230 del mismo package 718 00:44:04,230 --> 00:44:07,590 ahora, si nosotros estamos desarrollando 719 00:44:07,590 --> 00:44:09,510 un package, pero esta cosa aquí 720 00:44:09,510 --> 00:44:11,329 de repente sale otro sistema 721 00:44:11,329 --> 00:44:13,550 que son ellos de allá, que están desarrollando 722 00:44:13,550 --> 00:44:15,210 un package distinto, que pero 723 00:44:15,210 --> 00:44:16,989 quieren utilizar nuestra 724 00:44:16,989 --> 00:44:19,869 clase y necesitan 725 00:44:19,869 --> 00:44:21,269 extenderla 726 00:44:21,269 --> 00:44:23,269 y necesitan atacar esta variable 727 00:44:23,269 --> 00:44:24,789 para cambiarla de alguna forma 728 00:44:24,789 --> 00:44:27,170 pero le pongo protected 729 00:44:27,170 --> 00:44:29,590 que es, nosotros la podemos utilizar 730 00:44:29,590 --> 00:44:45,429 ellos que la extendan la pueden utilizar pero no hay nadie más, la visibilidad o la accesibilidad de esta clase 731 00:44:45,429 --> 00:44:48,889 que en este contexto son sinónimos 732 00:44:48,889 --> 00:44:59,789 Y luego, como puede ser protected, para yo referirme a esa clase de persona, por ejemplo, tendría que referirme también al par que está haciendo 733 00:44:59,789 --> 00:45:07,349 como nosotros hemos importado escáner si escáner dentro tuviera una variable de velocidad de 734 00:45:07,349 --> 00:45:14,130 lectura que si vale que fuera protect y tú cuando importa ese escáner no podrías hacer 735 00:45:14,130 --> 00:45:26,239 de asados pero si tú extiende ese escáner pues entonces si podría comprar esto simplemente para 736 00:45:26,239 --> 00:45:31,539 saber no se nos había quedado allí el tintero de teníamos cuatro posibles modificadores que 737 00:45:31,539 --> 00:45:37,679 era no poner nada, private, protected o public y protected no sabíamos qué era, ¿vale? 738 00:45:37,679 --> 00:45:45,880 Pues aquí hay un ejemplito, persona, con nombre, apellido, nacimiento, public persona 739 00:45:45,880 --> 00:45:52,260 que es el constructor, tiene otro constructor, fijaos que aquí, ¿qué está haciendo con 740 00:45:52,260 --> 00:45:53,440 los constructores? 741 00:45:54,539 --> 00:45:57,739 Pues está sobrecargando, ¿vale? 742 00:45:57,739 --> 00:46:00,480 hay dos métodos 743 00:46:00,480 --> 00:46:02,159 que se llaman iguales, dos constructores 744 00:46:02,159 --> 00:46:03,840 que se llaman iguales, con distintos 745 00:46:03,840 --> 00:46:05,739 parámetros para crear el objeto. 746 00:46:06,380 --> 00:46:08,179 Este de aquí no pilla nada, y por lo tanto 747 00:46:08,179 --> 00:46:09,500 creará un objeto básico. 748 00:46:09,980 --> 00:46:12,380 Este de aquí pilla todos los datos y por lo tanto 749 00:46:12,380 --> 00:46:14,139 asigna los datos concretamente. 750 00:46:14,599 --> 00:46:15,820 ¿Vale? Y luego imprime 751 00:46:15,820 --> 00:46:17,059 la cosa. ¿Vale? 752 00:46:20,809 --> 00:46:23,130 Entonces, ahora tenemos la clase alumno 753 00:46:23,130 --> 00:46:24,550 que extiende persona. 754 00:46:25,050 --> 00:46:25,570 ¿Vale? 755 00:46:27,090 --> 00:46:28,210 Tiene también 756 00:46:28,210 --> 00:46:29,949 el string grupo 757 00:46:29,949 --> 00:46:33,599 y el horario. Algo más. 758 00:46:34,159 --> 00:46:35,920 ¿Sí? Entonces, si yo aquí 759 00:46:35,920 --> 00:46:37,900 a un objeto alumno preguntara 760 00:46:37,900 --> 00:46:39,659 su nombre, ¿lo tendría? 761 00:46:43,219 --> 00:46:44,320 Si yo iba a hacer alumno 762 00:46:44,320 --> 00:46:46,460 x es igual a new 763 00:46:46,460 --> 00:46:48,440 alumno y luego poner 764 00:46:48,440 --> 00:46:50,579 x.nombre, ¿me daría 765 00:46:50,579 --> 00:46:52,460 un error? Aquí no está 766 00:46:52,460 --> 00:46:54,199 declarado nombre. ¿Me daría un error? 767 00:46:54,639 --> 00:46:56,500 No. ¿Por qué? 768 00:46:56,619 --> 00:46:58,000 Porque extende persona 769 00:46:58,000 --> 00:47:00,320 y en persona nombre está definido. 770 00:47:00,320 --> 00:47:14,969 por lo tanto existiría public alumno super acordáis cuando nosotros creábamos aquí de 771 00:47:14,969 --> 00:47:20,610 forma automática un constructor de esta raíz cuál es el último que hemos hecho 772 00:47:20,610 --> 00:47:28,289 ¿os acordáis que el constructor me ponía esta cosa? 773 00:47:28,289 --> 00:47:31,650 ¿qué es esta cosa? 774 00:47:31,650 --> 00:47:44,900 esto en este contexto aquí, nada más, lo que está haciendo es llamar el constructor de mi superclase 775 00:47:44,900 --> 00:47:48,059 con parámetros ninguno. 776 00:47:51,619 --> 00:47:54,079 Esto me está diciendo, ok, yo soy un alumno. 777 00:47:54,539 --> 00:47:57,719 Como primer paso para crear un alumno, ¿qué tengo que crear? 778 00:48:05,579 --> 00:48:08,860 Para crear un alumno, primer paso que tengo que hacer, 779 00:48:09,260 --> 00:48:15,679 tendré que crear un objeto alumno, usando su constructor. 780 00:48:16,099 --> 00:48:19,119 Primer paso, tendré como alumno que crear una. 781 00:48:25,429 --> 00:48:29,389 Para crear un alumno, como primer paso, tendré que crear una. 782 00:48:37,269 --> 00:48:38,750 Estoy creando objetos, creo clases. 783 00:48:39,190 --> 00:48:42,389 yo soy un objeto, la clase ya está hecha 784 00:48:42,389 --> 00:48:42,929 está allí 785 00:48:42,929 --> 00:48:46,170 voy a crear un objeto alumno 786 00:48:46,170 --> 00:48:48,130 para que un alumno 787 00:48:48,130 --> 00:48:49,210 exista 788 00:48:49,210 --> 00:48:52,090 primero tendré que definirlo 789 00:48:52,090 --> 00:48:53,769 como persona 790 00:48:53,769 --> 00:48:57,940 entonces el primer paso 791 00:48:57,940 --> 00:48:59,400 que hago es crear una persona 792 00:48:59,400 --> 00:49:02,019 y luego a esta persona le añado 793 00:49:02,019 --> 00:49:03,280 lo que es un alumno 794 00:49:03,280 --> 00:49:05,900 pero un alumno no es nada 795 00:49:05,900 --> 00:49:07,800 sin persona, no puedo crear 796 00:49:07,800 --> 00:49:09,219 un alumno sin una persona 797 00:49:09,219 --> 00:49:10,800 ¿por qué? 798 00:49:10,880 --> 00:49:12,739 Porque el alumno extiende a la persona. 799 00:49:15,159 --> 00:49:17,360 ¿Cómo puedo extender algo si no tengo este algo? 800 00:49:18,860 --> 00:49:19,960 ¿Entiendes el concepto? 801 00:49:20,639 --> 00:49:22,920 Entonces, cuando yo tengo un... 802 00:49:22,920 --> 00:49:23,440 Segundo. 803 00:49:23,639 --> 00:49:25,679 Cuando yo tengo un constructor de alumno, 804 00:49:26,239 --> 00:49:28,460 la primera cosa que hace el alumno 805 00:49:28,460 --> 00:49:32,599 es llamar el constructor de la superclase 806 00:49:32,599 --> 00:49:35,219 sin parámetros. 807 00:49:35,639 --> 00:49:36,340 Es decir, 808 00:49:37,639 --> 00:49:46,900 este señor pasó uno para crear un alumno. 809 00:49:46,900 --> 00:49:48,099 Crea una persona. 810 00:49:48,559 --> 00:49:57,880 La persona se creaba, una vez creada la persona, ahora hace otras cosas, que en este caso concreto 811 00:49:57,880 --> 00:50:06,260 es nada, porque estoy creando el alumno más básico de todo, el alumno anónimo. 812 00:50:06,260 --> 00:50:07,260 ¿Sí? 813 00:50:07,260 --> 00:50:08,260 ¿Había una duda? 814 00:50:08,260 --> 00:50:17,260 Entonces, en automático todas las subclases van creando superclases, que es un superclásico 815 00:50:17,260 --> 00:50:20,219 automático, por eso que... 816 00:50:20,219 --> 00:50:20,900 y automático. 817 00:50:22,480 --> 00:50:23,840 Ahora llegaremos a eso. 818 00:50:24,280 --> 00:50:25,559 Pero sí. O sea, tú, 819 00:50:26,019 --> 00:50:27,179 cuando creas un 820 00:50:27,179 --> 00:50:29,760 constructor, tienes que 821 00:50:29,760 --> 00:50:32,079 asegurarte que has creado 822 00:50:32,079 --> 00:50:34,239 un objeto de la 823 00:50:34,239 --> 00:50:34,780 superclase. 824 00:50:34,780 --> 00:50:36,460 Ah, vale. Por eso, pero nosotros como no lo hemos 825 00:50:36,460 --> 00:50:39,329 visto. No lo habéis visto, pero lo habéis visto. 826 00:50:39,969 --> 00:50:41,650 Ya no lo has visto. O sea, no lo habéis visto, malo está. 827 00:50:41,750 --> 00:50:41,969 Es así. 828 00:50:43,309 --> 00:50:44,730 Ahora llegamos a eso también. 829 00:50:45,389 --> 00:50:47,269 Ahora, otra opción. 830 00:50:47,789 --> 00:50:49,449 Sobrecargo alumno. ¿Vale? 831 00:50:49,449 --> 00:50:55,670 Creo un alumno sabiendo que es una persona, pero no sé sus datos de alumnos. 832 00:50:56,409 --> 00:50:57,510 Paso atrás. 833 00:50:58,449 --> 00:51:01,610 Aquí creo una persona sabiendo sus datos de persona. 834 00:51:02,690 --> 00:51:05,630 Aquí creo una persona sin saber sus datos de persona. 835 00:51:06,590 --> 00:51:07,449 Creo el objeto anónimo. 836 00:51:09,630 --> 00:51:09,989 ¿Me entiende? 837 00:51:10,670 --> 00:51:12,369 Yo podría borrar esto. 838 00:51:13,550 --> 00:51:15,409 Y entonces no puedo crear un objeto anónimo. 839 00:51:15,730 --> 00:51:17,309 No puedo crear una persona anónima. 840 00:51:18,170 --> 00:51:18,590 ¿Se entiende? 841 00:51:19,449 --> 00:51:23,570 Cada vez que creo una persona, tiene que tener su nombre, apellido y alineación. 842 00:51:23,789 --> 00:51:28,090 Eso lo tengo que poner, porque no hay una opción para ponerlo. 843 00:51:28,550 --> 00:51:31,230 Si en vez lo dejo así, sí hay una opción. 844 00:51:31,630 --> 00:51:32,690 Estoy dando las dos opciones. 845 00:51:32,690 --> 00:51:36,010 Puedes crear una persona cuando sabes todo de ella, 846 00:51:36,210 --> 00:51:40,469 o puedes crear una persona cuando no sabes nada de ella. 847 00:51:40,710 --> 00:51:44,329 Creas esa y luego ya veremos cómo la gestionamos. 848 00:51:45,050 --> 00:51:48,769 Tened en cuenta que ahora yo no tengo la posibilidad de crear una persona 849 00:51:48,769 --> 00:51:49,989 de la que solo sé el nombre. 850 00:51:52,309 --> 00:51:53,389 ¿Qué se llama, Stefano? 851 00:51:53,530 --> 00:51:55,809 Ahí persona, le paso Stefano y me crea un objeto. 852 00:51:59,800 --> 00:52:02,280 No hay un constructor persona, solo string nombre. 853 00:52:04,250 --> 00:52:04,710 ¿Lo veis o no? 854 00:52:05,969 --> 00:52:06,530 ¿Entienden o no? 855 00:52:07,670 --> 00:52:10,690 Aquí yo estoy proporcionando dos formas de crear personas. 856 00:52:11,150 --> 00:52:14,130 O personas de la que no sé nada, o personas de la que sé todo. 857 00:52:15,269 --> 00:52:20,389 Eso no implica que yo aquí podría poner anónimo, anónimo, cero. 858 00:52:22,010 --> 00:52:22,530 ¿Sí? 859 00:52:22,530 --> 00:52:25,409 pero o le doy un parámetro 860 00:52:25,409 --> 00:52:27,210 o le doy cero parámetros o le doy tres parámetros 861 00:52:27,210 --> 00:52:29,449 no existe crear una persona 862 00:52:29,449 --> 00:52:30,650 con un parámetro solo 863 00:52:30,650 --> 00:52:33,550 puedo hacerlo, sí, puedo sobrecargar 864 00:52:33,550 --> 00:52:35,329 este, poner public persona 865 00:52:35,329 --> 00:52:37,309 le string nombre, lo que hace es 866 00:52:37,309 --> 00:52:39,389 al nombre le pone nombre y el resto le pone 867 00:52:39,389 --> 00:52:40,469 cero y cero, que sí 868 00:52:40,469 --> 00:52:42,769 null y cero 869 00:52:42,769 --> 00:52:44,469 ¿se entiende? 870 00:52:45,269 --> 00:52:47,409 pero ahora mismo tengo solo estos dos metros 871 00:52:47,409 --> 00:52:48,030 bueno 872 00:52:48,030 --> 00:52:51,449 cuando quiero crear el alumno 873 00:52:51,449 --> 00:52:53,769 sin nada, lo que estoy haciendo 874 00:52:53,769 --> 00:52:55,429 es llamar el constructor 875 00:52:55,429 --> 00:52:57,389 de la superclase 876 00:52:57,389 --> 00:52:58,550 con nada. 877 00:53:00,469 --> 00:53:01,650 O sea, que el nombre 878 00:53:01,650 --> 00:53:02,610 de este alumno, ¿cuál será? 879 00:53:04,110 --> 00:53:04,590 Anónimo. 880 00:53:07,639 --> 00:53:08,920 Porque lo que hará es, 881 00:53:09,239 --> 00:53:11,139 vale, para crear el alumno tengo antes 882 00:53:11,139 --> 00:53:13,000 que crear una persona. ¿Cómo creo la persona? 883 00:53:13,119 --> 00:53:15,280 Usando esto. Su nombre es anónimo. 884 00:53:15,900 --> 00:53:17,440 Acabado el constructor de persona, 885 00:53:17,840 --> 00:53:19,239 voy a hacer lo que más 886 00:53:19,239 --> 00:53:21,199 hace la parte de alumno, que es 887 00:53:21,199 --> 00:53:28,280 en este caso, nada. He creado un alumno que tendrá nombre anónimo, apellido nul, año 888 00:53:28,280 --> 00:53:38,550 de nacimiento cero, grupo nul y horario, no sé qué echar, echar vacío. ¿Entendéis? 889 00:53:39,630 --> 00:53:47,949 Un alumno mock, un alumno que no es real. Vale. Segunda opción. Tengo el alumno al 890 00:53:47,949 --> 00:53:52,849 que le doy nombre, apellido, año de nacimiento. O sea, solo los datos que no vienen aquí. 891 00:53:52,849 --> 00:53:58,469 O sea, un alumno del que sé sus datos de persona, pero todavía no sé sus datos de alumno. 892 00:53:58,969 --> 00:53:59,670 ¿Lo veis? 893 00:54:00,909 --> 00:54:05,610 Pues entonces aquí llamo alumno, nombre, apellido, al nacimiento. 894 00:54:05,929 --> 00:54:15,369 Lo que hago es llamar el superconstructor, o sea, el constructor de la persona, con nombre, apellido y al nacimiento. 895 00:54:15,829 --> 00:54:20,949 Ahora estoy llamando este constructor, no este. 896 00:54:23,059 --> 00:54:23,440 ¿Se entiende? 897 00:54:23,440 --> 00:54:35,420 Por lo tanto, la parte, digamos, núcleo de la persona, la parte persona, que está aquí, ¿vale? 898 00:54:35,739 --> 00:54:41,619 Se creará con su nombre, su apellido y su año de nacimiento. 899 00:54:42,619 --> 00:54:44,639 Y a partir de allí, ¿qué hago? Nada. 900 00:54:45,639 --> 00:54:48,719 ¿Vale? Entonces tengo dos formas por ahora de crear un alumno. 901 00:54:49,000 --> 00:54:54,119 El alumno del que no sé nada y el alumno que solo sé sus datos de persona, 902 00:54:54,119 --> 00:55:01,619 pero no los datos propios del alumno. Y luego tengo un tercer constructor que me pilla nombre, 903 00:55:01,619 --> 00:55:08,460 apellido, nacimiento, el grupo y el horario. Entonces, ¿cómo lo creo? Llamando el 904 00:55:08,460 --> 00:55:16,320 superconstructor que me construye la parte de persona con los datos que le he pasado. 905 00:55:16,320 --> 00:55:26,000 Y una vez que ha creado la parte interna, la parte de persona, sigo añadiendo que, 906 00:55:26,000 --> 00:55:30,260 llamando este método que es pon-grupo, que se va a saber qué hace pon-grupo, pues sustancialmente 907 00:55:30,260 --> 00:55:34,659 asigna a grupo, grupo, horario, horario, haciendo una comprobación. 908 00:55:34,659 --> 00:55:40,880 Entonces yo tengo tres modos de crear un alumno. 909 00:55:40,880 --> 00:55:44,599 El alumno del que no sé nada, el alumno del que sólo sé que es una persona y los alumnos 910 00:55:44,599 --> 00:55:45,599 del que sé todo. 911 00:55:45,599 --> 00:55:48,750 ¿Verdad? 912 00:55:48,750 --> 00:55:56,159 Y luego tengo el primer grupo, que es un método propio de alumno. 913 00:55:58,260 --> 00:55:59,659 Entonces, ¿qué es este super? 914 00:55:59,659 --> 00:56:08,340 Super es una llamada al super constructor, al constructor de la clase super, ¿vale? 915 00:56:09,000 --> 00:56:15,920 Con los parámetros necesarios para elegir cuáles de los constructores de la clase superior voy a utilizar. 916 00:56:18,750 --> 00:56:21,309 Ahora, vosotros nunca lo habéis puesto. 917 00:56:22,650 --> 00:56:31,289 ¿Habéis puesto alguna vez super? No. Pero hemos dicho que vuestra clase hereda el object. 918 00:56:31,289 --> 00:56:39,289 Entonces, cuando vosotros habéis creado la clase animal, habéis creado la clase animal, la clase cafetera. 919 00:56:39,289 --> 00:56:47,289 Cuando vosotros habéis creado la clase cafetera, ¿qué ha hecho para crear una cafetera, para crear un objeto cafetera? ¿Qué se ha hecho? 920 00:56:47,289 --> 00:56:55,570 Primero, crear un objeto object, y luego sobre el objeto object creado se ha creado la cafetera, 921 00:56:55,730 --> 00:56:59,269 porque cafetera hereda de object, pero vosotros no os lo habéis dicho. 922 00:57:00,449 --> 00:57:12,739 ¿Por qué? Porque por defecto, si vosotros no ponéis nada, si no se pone nada, 923 00:57:13,099 --> 00:57:22,420 la primera línea de un constructor es esta, que esta línea de aquí se puede quitar 924 00:57:22,420 --> 00:57:24,679 y se llama igualmente 925 00:57:24,679 --> 00:57:26,019 no obstante no esté. 926 00:57:27,079 --> 00:57:27,639 Pero cuidado. 927 00:57:28,320 --> 00:57:30,380 Llama super así. 928 00:57:31,960 --> 00:57:32,820 ¿Os acordáis que 929 00:57:32,820 --> 00:57:34,980 cada objeto 930 00:57:34,980 --> 00:57:36,559 tenía un constructor por defecto? 931 00:57:37,360 --> 00:57:39,199 Era el constructor sin parámetros. 932 00:57:40,400 --> 00:57:41,340 Si yo en la clase 933 00:57:41,340 --> 00:57:42,340 superclase 934 00:57:42,340 --> 00:57:45,440 le quito el constructor por defecto 935 00:57:45,440 --> 00:57:46,739 ¿vale? 936 00:57:46,739 --> 00:57:48,559 Y luego heredo 937 00:57:48,559 --> 00:57:50,739 y no pongo esta línea aquí 938 00:57:50,739 --> 00:57:52,639 él por defecto llamará 939 00:57:52,639 --> 00:57:55,000 super constructor por defecto 940 00:57:55,000 --> 00:57:56,579 y entonces no funcionará 941 00:57:56,579 --> 00:57:57,739 esto no lo hace 942 00:57:57,739 --> 00:58:00,780 entonces cuidado 943 00:58:00,780 --> 00:58:03,960 esto que se ponga o no se ponga 944 00:58:03,960 --> 00:58:06,039 siempre se ejecutará y es siempre la 945 00:58:06,039 --> 00:58:08,039 primera línea del 946 00:58:08,039 --> 00:58:09,980 constructor, la primera 947 00:58:09,980 --> 00:58:12,079 línea del constructor es una llamada 948 00:58:12,079 --> 00:58:14,460 a la super clase para que construya 949 00:58:14,460 --> 00:58:15,139 la 950 00:58:15,139 --> 00:58:18,179 la parte digamos el core 951 00:58:18,179 --> 00:58:20,119 el núcleo de mi objeto, luego ya lo 952 00:58:20,119 --> 00:58:21,000 extendo con mis cosas 953 00:58:21,000 --> 00:58:24,860 la primera cosa que hago 954 00:58:24,860 --> 00:58:25,980 es construir un objeto 955 00:58:25,980 --> 00:58:29,059 una vez que tengo un objeto pues le añado las cosas de cafetera 956 00:58:29,059 --> 00:58:30,579 pero no tengo que construir el objeto 957 00:58:30,579 --> 00:58:32,880 si no le he dicho nada, crearé un objeto 958 00:58:32,880 --> 00:58:34,440 sin nada 959 00:58:34,440 --> 00:58:36,420 con el constructor por defecto de orden 960 00:58:36,420 --> 00:58:38,480 si yo creo una persona 961 00:58:38,480 --> 00:58:41,239 si yo creo un alumno por ejemplo 962 00:58:41,239 --> 00:58:43,099 volviendo aquí 963 00:58:43,099 --> 00:58:47,809 cuando yo creo el alumno 964 00:58:47,809 --> 00:58:52,579 el alumno dirá 965 00:58:52,579 --> 00:58:54,460 vale, muy bien, voy a crear 966 00:58:54,460 --> 00:58:56,079 voy a llamar 967 00:58:56,079 --> 00:59:02,000 el constructor de persona, entonces irá a este constructor de aquí. 968 00:59:02,460 --> 00:59:04,619 ¿Qué hará aquí el constructor de persona? 969 00:59:06,760 --> 00:59:09,460 ¿Cuál es la primera línea del constructor de persona? 970 00:59:13,820 --> 00:59:18,019 Super, paréntesis, paréntesis, hasta si no está escrito. 971 00:59:18,559 --> 00:59:23,059 La primera cosa que hará para construir una persona es irse a Object, 972 00:59:23,460 --> 00:59:27,760 crear un objeto Object, a esto extenderlo con las propiedades de persona, 973 00:59:27,760 --> 00:59:37,039 y a este punto habré hecho la parte gris, y a este punto volveré aquí y la extenderé con la parte que tengo que extenderla aquí abajo. 974 00:59:37,920 --> 00:59:42,699 En este caso aquí, por ejemplo, añadiendole la grupo de horario. 975 00:59:44,420 --> 00:59:44,579 ¿Tiene? 976 00:59:46,159 --> 00:59:46,679 ¿Duda? 977 00:59:47,400 --> 00:59:47,920 No. 978 00:59:49,860 --> 00:59:50,119 Bueno. 979 00:59:55,829 --> 00:59:56,309 Prueba... 980 00:59:56,309 --> 00:59:59,449 Llego hasta aquí, dos transparencias y luego dejamos el ejercicio, ¿vale? 981 01:00:00,289 --> 01:00:08,789 prueba esta clase prueba vale entonces su main donde crea una persona y un 982 01:00:08,789 --> 01:00:15,750 alumno cuando crea una persona pues new persona pues con sus datos cuando crea 983 01:00:15,750 --> 01:00:21,730 un alumno pues tengo sus datos también vale tened cuenta que a un alumno yo 984 01:00:21,730 --> 01:00:31,539 puedo llamarle pongrupo os acordáis este método de aquí este método de aquí pongrupo 985 01:00:31,539 --> 01:00:34,139 es público. Si tú creas 986 01:00:34,139 --> 01:00:35,880 un objeto que ya sabe 987 01:00:35,880 --> 01:00:38,059 su grupo de horario, él lo hace 988 01:00:38,059 --> 01:00:40,079 directamente allí. Pero tú puedes crear 989 01:00:40,079 --> 01:00:42,280 un objeto sin su grupo de horario 990 01:00:42,280 --> 01:00:43,900 usando este constructor de aquí 991 01:00:43,900 --> 01:00:46,019 y luego después llamar a este 992 01:00:46,019 --> 01:00:47,920 método para asignarlo a un grupo 993 01:00:47,920 --> 01:00:49,320 de un horario. ¿Sí? 994 01:00:49,659 --> 01:00:50,619 Que es lo que se hace aquí. 995 01:00:51,619 --> 01:00:54,059 Se crea un alumno solo con 996 01:00:54,059 --> 01:00:55,639 sus datos de persona 997 01:00:55,639 --> 01:00:57,679 ¿Vale? Y después 998 01:00:57,679 --> 01:00:59,780 se hace un grupo. 999 01:00:59,780 --> 01:01:03,840 Ahora, si yo estos dos 1000 01:01:03,840 --> 01:01:05,199 lo hubiese puesto aquí al final, 1001 01:01:05,639 --> 01:01:06,440 pues habría hecho lo mismo. 1002 01:01:08,019 --> 01:01:09,059 ¿Sí? Vale. 1003 01:01:10,340 --> 01:01:11,960 Y luego llamamos vecino.imprime, 1004 01:01:12,019 --> 01:01:13,780 un alumno.imprime, un alumno.imprime 1005 01:01:14,460 --> 01:01:15,139 grupo, ¿vale? 1006 01:01:15,860 --> 01:01:16,820 Esto de aquí 1007 01:01:16,820 --> 01:01:19,480 escribe datos personales, Luisa, 1008 01:01:19,599 --> 01:01:20,300 bla, bla, bla, bla, bla. 1009 01:01:21,480 --> 01:01:23,780 Este de aquí es imprime, 1010 01:01:23,980 --> 01:01:26,079 es un método derivante de persona. 1011 01:01:26,320 --> 01:01:27,960 Por lo tanto, escribe lo mismo de persona. 1012 01:01:27,960 --> 01:01:29,440 Este es como si fuera una persona. 1013 01:01:29,780 --> 01:01:33,179 Y luego, después, imprimo el grupo y me imprime. 1014 01:01:33,420 --> 01:01:35,719 ¿Podría hacer vecina.imprimeGrupo? 1015 01:01:36,780 --> 01:01:40,579 No, porque la vecina no es un alumno. 1016 01:01:41,500 --> 01:01:44,260 E imprimeGrupo es solo el alumno. 1017 01:01:45,800 --> 01:01:50,510 Sin embargo, imprime es en persona. 1018 01:01:50,730 --> 01:01:53,849 Por lo tanto, lo puede llamar tanto el alumno como la persona. 1019 01:01:56,110 --> 01:01:56,449 ¿Sí o no? 1020 01:01:59,269 --> 01:01:59,610 ¿Vale? 1021 01:02:00,210 --> 01:02:04,110 ¿Qué pasaría si el atributo nombre 1022 01:02:04,110 --> 01:02:14,960 fuera declarado private. O sea, si yo me meto aquí y este nombre, en vez que protecte, te lo pongo 1023 01:02:14,960 --> 01:02:26,039 como private. ¿Quién puede acceder a este nombre? Solo persona. ¿Puede acceder a la clase que 1024 01:02:26,039 --> 01:02:50,280 extiende? Me sirve. Ahora, si yo aquí, en vez de poner super nombre bla bla bla bla, podría poner 1025 01:02:50,280 --> 01:02:58,280 Dis.nombre es igual a nombre. Dis.apellido es igual a apellido. Dis.años de nacimiento es igual a años de nacimiento. 1026 01:02:58,280 --> 01:03:13,960 Lo podría poner. ¿Por qué no? El alumno tiene Dis.nombre. Sí, porque lo hereda. 1027 01:03:13,960 --> 01:03:20,960 Pero si yo lo pusiera así y luego pongo nombre privado, ¿lo podría hacer? No. 1028 01:03:20,960 --> 01:03:25,960 ¿Y con súper lo podría hacer? Sí. Me explico mejor. 1029 01:03:25,960 --> 01:03:30,559 Imaginámonos que yo, en alumno, tenga esta cosa aquí. 1030 01:03:30,559 --> 01:03:38,199 Me da nombre, apellido y anonacimiento, y hago dispunto nombre, nombre, dispunto apellido, apellido, dispunto anonacimiento, anonacimiento. 1031 01:03:38,199 --> 01:03:41,199 ¿Lo puedo hacer? Sí, en alumno. 1032 01:03:41,199 --> 01:03:48,599 ¿Por qué? Porque como heredo, como extendo persona, yo puedo acceder a dispunto nombre. 1033 01:03:48,599 --> 01:03:50,599 Es un atributo mío también. 1034 01:03:50,599 --> 01:03:52,599 Yo tengo todo lo que tiene la persona. 1035 01:03:52,599 --> 01:04:01,880 y la otra opción es lo que hemos hecho aquí con el súper estos dos hacen lo mismo ahora qué pasa 1036 01:04:01,880 --> 01:04:10,099 que si yo en persona le pongo private al nombre cuando intento acceder a this punto nombre esto 1037 01:04:10,099 --> 01:04:17,840 me dice no puedes es private sólo se puede usar desde persona es verdad que tú eres una persona 1038 01:04:17,840 --> 01:04:20,480 Pero no eres la clase persona, eres la clase alumno. 1039 01:04:21,059 --> 01:04:23,780 Y esto es accesible solo interno a la clase persona. 1040 01:04:24,860 --> 01:04:28,800 Esto no me permitiría crear una persona con el nombre. 1041 01:04:30,139 --> 01:04:32,659 Sin embargo, esto, sí. ¿Por qué? 1042 01:04:36,760 --> 01:04:38,139 Y el constructor es. 1043 01:04:38,659 --> 01:04:47,449 El constructor sí se puede llamar desde fuera. 1044 01:04:47,929 --> 01:04:49,469 Hasta si este de aquí es tuyo. 1045 01:04:50,929 --> 01:04:51,110 ¿Sí? 1046 01:04:51,110 --> 01:04:55,909 Por eso, esto contesta la pregunta 1047 01:04:55,909 --> 01:04:59,750 que claramente vosotros estaréis haciendo en vuestra cabeza de ¿por qué tengo que llamar 1048 01:04:59,750 --> 01:05:07,949 super cuando puedo hacerla así? Esto aquí no funciona porque al intentar acceder al 1049 01:05:07,949 --> 01:05:16,409 dis.nombre sale el error el field persona.nombre no es visible porque es privado. Sin embargo, 1050 01:05:16,409 --> 01:05:20,510 si haces así, sí funciona porque no accedo directamente al campo privado sino llamo al 1051 01:05:20,510 --> 01:05:29,260 constructo de la superclase. ¿Sí? Entonces ahora vamos a hacer un ejercitito, ¿vale? 1052 01:05:29,820 --> 01:05:38,000 Que es esto, es decir, tengo una clase dispositivo, tengo una clase móvil y una clase ordenador, 1053 01:05:38,900 --> 01:05:45,079 pues lo que quiero hacer es construirme tres clases, aquí hay tres clases, una que será 1054 01:05:45,079 --> 01:05:50,179 genérico de un dispositivo, una que será en particular un móvil que es un dispositivo 1055 01:05:50,179 --> 01:05:52,920 y uno que está en un ordenador, ¿qué es un dispositivo? 1056 01:05:54,260 --> 01:05:54,460 ¿Sí? 1057 01:05:54,719 --> 01:05:56,239 A lo mejor un pequeño main 1058 01:05:56,239 --> 01:05:58,659 para crear un dispositivo, 1059 01:05:58,800 --> 01:06:00,360 un ordenador y un móvil 1060 01:06:00,360 --> 01:06:01,840 y trabajar un poquito con ellos. 1061 01:06:02,559 --> 01:06:03,900 ¿Vale? Entonces, 1062 01:06:04,219 --> 01:06:08,960 tenéis 10 minutos para hacerlo, 1063 01:06:09,699 --> 01:06:11,179 luego recreo y después 1064 01:06:11,179 --> 01:06:13,280 de recreo lo rehacemos 1065 01:06:13,280 --> 01:06:15,059 juntos. ¿Vale? A ver si os habéis 1066 01:06:15,059 --> 01:06:17,199 bloqueado en algún lado 1067 01:06:17,199 --> 01:06:18,820 o no lo habéis podido hacer o 1068 01:06:18,820 --> 01:06:20,119 sabéis... 1069 01:06:20,119 --> 01:06:21,199 ¿Vale? 1070 01:06:21,199 --> 01:06:24,530 Gracias.