1 00:00:00,370 --> 00:00:11,210 Vale, este vídeo es una grabación, por lo tanto si decidís de hablar, automáticamente me dais el consentimiento a que se grabe vuestra voz, ¿vale? 2 00:00:11,330 --> 00:00:15,669 Hoy vamos a hablar de un tema nuevo que es la herencia, ¿vale? 3 00:00:16,690 --> 00:00:23,769 Entonces, ¿qué es la herencia así en plan definición básica? 4 00:00:24,170 --> 00:00:28,489 Pues es un mecanismo para la reutilización de software, ¿vale? 5 00:00:28,489 --> 00:00:37,869 La idea es que una de las cosas importantes cuando yo voy a trabajar y a desarrollar aplicaciones y cosas por el estilo 6 00:00:37,869 --> 00:00:44,390 es que mi código debería ser reutilizable, ¿vale? 7 00:00:44,530 --> 00:00:50,210 Muchas veces en un proyecto o en un proyecto nuevo, las cosas que necesito, 8 00:00:50,210 --> 00:00:57,869 Algunas clases, algunas herramientas que me permiten conectarme a otro sistema 9 00:00:57,869 --> 00:00:59,369 A una base de datos o cosas por el estilo 10 00:00:59,369 --> 00:01:04,129 Ya están desarrolladas anteriormente 11 00:01:04,129 --> 00:01:08,189 Y muchas veces no necesito volver a reinventar la rueda 12 00:01:08,189 --> 00:01:13,590 Para decir, mira, voy a crear otra vez la conexión a la base de datos 13 00:01:13,590 --> 00:01:16,370 Porque tengo ya una clase que hace los métodos que necesito 14 00:01:16,370 --> 00:01:17,430 Pero lo hago otra vez 15 00:01:17,430 --> 00:01:22,650 Hay momentos en el desarrollo de un sistema en que esto puede ser necesario o útil 16 00:01:22,650 --> 00:01:26,090 Si hay una clase que se usa ya desde 20 años 17 00:01:26,090 --> 00:01:32,230 Que usa un Java antiguo y que funcionaba hace 20 años y hasta ahora ha funcionado 18 00:01:32,230 --> 00:01:34,689 Y ahora me viene un momento en que la necesidad me dice 19 00:01:34,689 --> 00:01:37,689 Mira, esta clase hay que rehacerla nueva para que sea más eficiente 20 00:01:37,689 --> 00:01:39,609 Y cosas por el estilo, pues se rehace desde cero 21 00:01:39,609 --> 00:01:40,549 Fenomenal 22 00:01:40,549 --> 00:01:50,049 Pero en general la idea es que yo pueda utilizar componentes o módulos o clases o paquetes de otros proyectos 23 00:01:50,049 --> 00:01:53,730 Si es que esos me sirven para el proyecto nuevo que estoy haciendo 24 00:01:53,730 --> 00:01:59,629 Y esto todo es como idea general de utilización de software, de coding 25 00:01:59,629 --> 00:02:04,129 Pues la herencia es un mecanismo que me permite eso 26 00:02:04,129 --> 00:02:13,349 Es un mecanismo que me permite estructurar de forma más organizada lo que es mi código 27 00:02:13,349 --> 00:02:22,349 Para que yo luego pueda heredar, pueda pillar el código ya creado y reutilizarlo fácilmente 28 00:02:22,349 --> 00:02:30,770 Permite sostancialmente definir una clase a partir de otras clases reutilizando su código 29 00:02:30,770 --> 00:02:36,409 Un ejemplo básico para entender de lo que estamos haciendo es este de aquí 30 00:02:36,409 --> 00:02:39,250 Imaginaos que yo tenga una clase Persona 31 00:02:39,250 --> 00:02:42,870 La clase Persona tiene un string nombre y un ente edad 32 00:02:42,870 --> 00:02:46,370 Y cualquier persona tiene estos datos 33 00:02:46,370 --> 00:02:50,909 A mí me interesa en mi sistema el nombre de las personas y la edad de la persona 34 00:02:50,909 --> 00:02:57,210 A partir de aquí mi sistema me pide, por ejemplo, que cree una clase Profesor 35 00:02:57,210 --> 00:03:00,509 Ahora, el profesor es una persona 36 00:03:00,509 --> 00:03:05,310 La clase profesor debería tener nombre, debería tener edad 37 00:03:05,310 --> 00:03:11,710 Y además algo más que estas informaciones para que haga algo más 38 00:03:11,710 --> 00:03:14,449 Que puede ser un método más, puede ser un atributo más 39 00:03:14,449 --> 00:03:21,210 Por ejemplo, me interesa un array de string que me diga las asignaturas que imparte este profesor 40 00:03:21,210 --> 00:03:26,949 La idea es que si yo no tuviera este nuevo mecanismo que ahora vamos a ver 41 00:03:26,949 --> 00:03:30,409 Pues debería crear una nueva clase profesor 42 00:03:30,409 --> 00:03:33,030 Donde vuelva a escribir que tiene string nombre 43 00:03:33,030 --> 00:03:34,550 Tiene int edad 44 00:03:34,550 --> 00:03:38,189 Y además tiene string asignatura impartida 45 00:03:38,189 --> 00:03:41,150 La idea es que evite esto 46 00:03:41,150 --> 00:03:43,750 Y simplemente le diga a la clase profesor 47 00:03:43,750 --> 00:03:44,789 Oye, mira profesor 48 00:03:44,789 --> 00:03:48,610 Tú, en algún modo, heredas 49 00:03:48,610 --> 00:03:51,349 Tienes una relación con persona 50 00:03:51,349 --> 00:03:55,150 Tú, profesor, eres una persona 51 00:03:55,150 --> 00:03:57,750 Por lo tanto tendrás todo lo que tiene persona 52 00:03:57,750 --> 00:04:02,169 Y además de eso, algo más que hace que tú seas un profesor 53 00:04:02,169 --> 00:04:07,909 Y yo luego con un profesor puedo pedirle su nombre, puedo pedirle su edad 54 00:04:07,909 --> 00:04:10,030 Y además puedo pedirle esa cosa extra 55 00:04:10,030 --> 00:04:14,789 O por ejemplo, puedo crear un estudiante 56 00:04:14,789 --> 00:04:18,050 Y también el estudiante es una persona 57 00:04:18,050 --> 00:04:23,470 Entonces yo pondré que también estudiante es hereda de persona 58 00:04:23,470 --> 00:04:28,709 Y además de todo lo que tenga persona, pues le añado sus notas 59 00:04:28,709 --> 00:04:31,410 Por ejemplo, una red de int que son sus notas 60 00:04:31,410 --> 00:04:33,910 Entonces aquí yo tengo tres clases, ¿vale? 61 00:04:34,050 --> 00:04:35,810 Que se relacionan entre ellos 62 00:04:35,810 --> 00:04:39,529 Yo puedo crear una persona cualquiera que no es ni profesor ni estudiante 63 00:04:39,529 --> 00:04:41,810 Tendrá solo nombre y edad 64 00:04:41,810 --> 00:04:47,170 O puedo crear un profesor que tendrá todo lo que es la persona más lo propio del profesor 65 00:04:47,170 --> 00:04:53,009 O crear un estudiante que tendrá todo lo que es una persona más las notas 66 00:04:53,009 --> 00:05:10,769 La cosa interesante es que antes, en una situación como esta, entre personas, profesores, estudiantes, repitiendo todo, si yo quería hacer un cambio en, por ejemplo, cómo se maneja el nombre o la edad de las personas, tenía por triplicado este código. 67 00:05:10,769 --> 00:05:18,310 Que tenía que ir en tres clases distintas a cambiar, a modificar, a actualizar el código que tenía 68 00:05:18,310 --> 00:05:24,670 En vez de ahora, en cierto sentido, tengo el código una sola vez en persona 69 00:05:24,670 --> 00:05:28,089 Y las otras dos clases heredan de esta persona 70 00:05:28,089 --> 00:05:34,089 Si yo hago un cambio en cómo se gestiona el nombre, la edad o los atributos que tiene una persona 71 00:05:34,089 --> 00:05:40,430 Automáticamente las otras clases que heredan de ellas adquirirán estos cambios 72 00:05:40,430 --> 00:05:51,209 ¿Cuándo y para qué se usa la herencia? 73 00:05:51,449 --> 00:05:56,050 Hay dos escenarios posibles en que la herencia nos viene muy bien 74 00:05:56,050 --> 00:05:58,290 Uno es el caso de especialización 75 00:05:58,290 --> 00:06:02,670 Por ejemplo, la clase coche como especialización de vehículo 76 00:06:02,670 --> 00:06:07,329 Esto es en el caso en el que yo quiero desarrollar una nueva clase 77 00:06:07,329 --> 00:06:09,910 Una clase extra en mi sistema 78 00:06:09,910 --> 00:06:14,810 Y que esta clase se parece mucho a otra clase ya existente 79 00:06:14,810 --> 00:06:20,529 Que buena parte del código de esta clase nueva ya está en otra clase 80 00:06:20,529 --> 00:06:22,649 Entonces, que ya existe 81 00:06:22,649 --> 00:06:27,790 Entonces, en vez de estar a escribir otra vez el mismo código 82 00:06:27,790 --> 00:06:31,490 Y a duplicar el código, que si luego me doy cuenta que hay un error 83 00:06:31,490 --> 00:06:34,089 Lo tengo que cambiar en 2, 3, 4, 50 clases 84 00:06:34,089 --> 00:06:39,189 Pues lo que hago es extender la clase que ya existe 85 00:06:39,189 --> 00:06:41,529 Pues en este caso existe ya vehículo 86 00:06:41,529 --> 00:06:59,529 Y yo extendo la clase vehículo con coche, que es un vehículo, por lo tanto tendrá todo lo que tiene este vehículo, y además algo más, una característica o un método o las dos cosas adicionales para especificar cuál es la diferencia entre un coche y un vehículo. 87 00:06:59,529 --> 00:07:09,360 Entonces, la solución de un escenario como ese en el que ya tengo una clase y quiero crear una clase nueva 88 00:07:09,360 --> 00:07:14,259 Que esta clase nueva comparte muchísimo de la clase anterior, pero extiende en algo 89 00:07:14,259 --> 00:07:19,360 Es crear una subclase, o clase liga o clase derivada, ¿vale? Así sea 90 00:07:19,360 --> 00:07:24,680 ¿Qué es? Creo esta clase nueva, hago que se refiera a la clase anterior 91 00:07:24,680 --> 00:07:29,680 Pilla todo lo que había en común con la clase anterior y es como si lo duplicara 92 00:07:29,680 --> 00:07:32,779 Y además añado el específico de esta nueva clase 93 00:07:32,779 --> 00:07:38,420 La segunda opción en que la herencia es útil es el proceso al revés 94 00:07:38,420 --> 00:07:40,560 Es la generalización, ¿vale? 95 00:07:41,259 --> 00:07:48,899 O sea, crear la clase vehículo como generalización de coche, moto, patinete y bicicleta 96 00:07:48,899 --> 00:07:54,720 Esto pasa cuando como escenario tenemos un conjunto de muchas clases 97 00:07:54,720 --> 00:08:02,920 Y nos damos cuenta que en estas clases de mi sistema hay algo en común 98 00:08:02,920 --> 00:08:07,120 Hay muchos elementos que son parecidos 99 00:08:07,120 --> 00:08:14,420 Si pensáis, por ejemplo, yo tuviera la clase coche, la clase moto y la clase patinete 100 00:08:14,420 --> 00:08:19,699 Pues a lo mejor todos tienen, qué sé yo, número de ruedas, tienen velocidad máxima 101 00:08:19,699 --> 00:08:28,600 tienen algunos atributos y métodos, o moverse como método y cosas por el estilo, que se parecen mucho. 102 00:08:28,939 --> 00:08:34,879 Entonces puede llegar un momento en que digo, vale, en vez de tener este código muy parecido, 103 00:08:34,879 --> 00:08:43,440 por triplicado, cuadruplicado y cosas por el estilo en varias clases, la parte común de todas estas la pongo en una clase única, 104 00:08:44,320 --> 00:08:49,559 que es una clase que generaliza el concepto que estoy modelizando. 105 00:08:49,700 --> 00:08:58,659 para luego dejar las clases que tenía ahora como hijas, como clases que heredan, como subclases de esta clase generalizada, 106 00:08:59,320 --> 00:09:03,259 poniendo solo en cada uno la parte distinta con respecto a todos los demás. 107 00:09:08,080 --> 00:09:17,039 Entonces, la herencia normalmente se piensa desde arriba hasta abajo, o sea, yo tengo ya una clase hecha y creo una clase hija que extende, 108 00:09:17,039 --> 00:09:20,240 añade algo a la clase 109 00:09:20,240 --> 00:09:22,179 que existía. Pero si yo estoy 110 00:09:22,179 --> 00:09:23,980 haciendo una realización o 111 00:09:23,980 --> 00:09:25,720 llego en una empresa nueva o 112 00:09:25,720 --> 00:09:27,440 un proyecto viejo o 113 00:09:27,440 --> 00:09:30,220 un sistema que ya 114 00:09:30,220 --> 00:09:32,240 está construido, pues puede ser útil 115 00:09:32,240 --> 00:09:34,100 hacer un análisis y ver si 116 00:09:34,100 --> 00:09:36,360 alguna de las clases que ya existen en realidad 117 00:09:36,360 --> 00:09:38,200 comparten mucho código y este 118 00:09:38,200 --> 00:09:40,120 código se puede agrupar 119 00:09:40,120 --> 00:09:42,779 en una única clase, mejorando 120 00:09:42,779 --> 00:09:44,200 mucho lo que es 121 00:09:44,200 --> 00:09:46,100 la mantenibilidad 122 00:09:46,100 --> 00:09:47,139 De este sistema 123 00:09:47,139 --> 00:09:47,759 ¿Vale? 124 00:09:47,840 --> 00:09:50,039 Porque ahora no tengo que ir en 7 puntos distintos 125 00:09:50,039 --> 00:09:51,100 Cada vez que quiero hacer un cambio 126 00:09:51,100 --> 00:09:53,399 Los tengo todos centralizados en una clase 127 00:09:53,399 --> 00:09:55,480 Que luego se hereda en la otra 128 00:09:55,480 --> 00:10:00,360 Vale 129 00:10:00,360 --> 00:10:02,200 Este es un ejemplo más 130 00:10:02,200 --> 00:10:05,960 Directo, entre comillas 131 00:10:05,960 --> 00:10:07,440 Para entender de qué estamos hablando 132 00:10:07,440 --> 00:10:08,779 No sé si se ve bien 133 00:10:08,779 --> 00:10:11,480 Vamos a ver 134 00:10:11,480 --> 00:10:14,019 La situación sin herencia 135 00:10:14,019 --> 00:10:14,879 ¿Vale? 136 00:10:15,360 --> 00:10:18,360 Entonces, imaginémonos que estamos en una situación parecida a esta 137 00:10:18,360 --> 00:10:20,379 Nosotros tenemos tres clases 138 00:10:20,379 --> 00:10:23,639 Tenemos la clase recurso, que es un recurso genérico 139 00:10:23,639 --> 00:10:26,700 Y luego tenemos la clase aula y la clase ordenador 140 00:10:26,700 --> 00:10:29,279 Que son recursos de mi escuela, por ejemplo 141 00:10:29,279 --> 00:10:29,820 ¿Vale? 142 00:10:30,139 --> 00:10:33,720 Entonces, recurso tiene un nombre, una descripción 143 00:10:33,720 --> 00:10:38,980 Un método que es tu nombre, de qué recurso eres 144 00:10:38,980 --> 00:10:40,740 Y decir descripción, ¿vale? 145 00:10:40,779 --> 00:10:41,840 Es exactamente un osguete 146 00:10:41,840 --> 00:10:42,320 ¿Vale? 147 00:10:43,200 --> 00:10:43,960 Vale, fenomenal 148 00:10:43,960 --> 00:10:45,159 Cuando voy al aula 149 00:10:45,159 --> 00:10:49,899 El aula es un recurso también en general, ¿vale? 150 00:10:49,940 --> 00:10:53,679 Pero que tiene su nombre, su descripción, su decir nombre, su decir descripción 151 00:10:53,679 --> 00:10:58,039 Y además tiene localización y decir localización, ¿vale? 152 00:10:58,299 --> 00:11:04,399 Aquí si yo veo, la parte en azul es sustancialmente código redundante 153 00:11:04,399 --> 00:11:08,740 Código que ya existía antes y que he vuelto a escribir en esta clase aquí 154 00:11:08,740 --> 00:11:10,620 Y que será muy parecido 155 00:11:10,620 --> 00:11:14,879 Pero tiene también la parte negra, digamos, que es la parte nueva 156 00:11:14,879 --> 00:11:18,159 Son cosas que un recurso genérico no puede decir 157 00:11:18,159 --> 00:11:19,480 Mientras que un aula sí 158 00:11:19,480 --> 00:11:21,480 Lo mismo pasa con el ordenador 159 00:11:21,480 --> 00:11:24,980 El ordenador tiene nombre, descripción y los métodos relacionados 160 00:11:24,980 --> 00:11:30,100 Que igualmente, porque es un recurso y me sirve para identificar el ordenador 161 00:11:30,100 --> 00:11:32,960 Pero también tiene el sistema operativo que tiene instalado 162 00:11:32,960 --> 00:11:35,899 Entonces, en una situación como esta 163 00:11:35,899 --> 00:11:39,679 La herencia me sirve 164 00:11:39,679 --> 00:11:42,960 Porque lo que puedo hacer es pasar a esto 165 00:11:42,960 --> 00:11:51,139 Es decir, crear a este punto una clase padre o superclase 166 00:11:51,139 --> 00:11:55,940 O clase... no sé, hay varios nombres, ahora lo veremos 167 00:11:55,940 --> 00:11:58,899 Que está por arriba, digamos, de recursos 168 00:11:58,899 --> 00:12:02,480 Es una clase generalizada, es una idea general de recursos 169 00:12:02,480 --> 00:12:03,980 Todos los recursos están hechos así 170 00:12:03,980 --> 00:12:07,220 Hemos visto que tanto aula como ordenador tenía estas cosas 171 00:12:07,220 --> 00:12:10,820 Por lo tanto, un recurso genérico tiene que tener un nombre, una descripción 172 00:12:10,820 --> 00:12:12,720 Decir su nombre, decir su descripción 173 00:12:12,720 --> 00:12:20,320 Y luego hago que aula y ordenador hereden de esta clase de cursos 174 00:12:20,320 --> 00:12:24,019 Entonces este concepto de herencia que estamos viendo hasta ahora 175 00:12:24,019 --> 00:12:30,559 Lo que está haciendo es como si el código de recurso lo copiara dentro de aula 176 00:12:30,559 --> 00:12:33,980 Y luego añadiera lo extra 177 00:12:33,980 --> 00:12:36,919 Pero en realidad no lo está haciendo 178 00:12:36,919 --> 00:12:40,220 Esto es una cosa interesante porque si mañana 179 00:12:40,220 --> 00:12:42,659 Quiero añadir algo a un recurso genérico 180 00:12:42,659 --> 00:12:46,860 O quiero modificar, por ejemplo, decir nombre, decir descripción 181 00:12:46,860 --> 00:12:50,039 Para que haga algo distinto y haga algo más formal 182 00:12:50,039 --> 00:12:55,279 O resolver un error o encontrar un algoritmo que hace algo de forma más eficiente 183 00:12:55,279 --> 00:12:57,580 Lo tengo que cambiar solo en recurso 184 00:12:57,580 --> 00:13:01,740 No en todas las clases que antes tenían estos datos 185 00:13:01,740 --> 00:13:05,659 Y automáticamente, como todas las otras clases se heredan de esto 186 00:13:05,659 --> 00:13:07,019 Los opinios 187 00:13:07,019 --> 00:13:09,470 Dudas 188 00:13:09,470 --> 00:13:20,200 En general, cuando se habla de una cosa así de herencia 189 00:13:20,200 --> 00:13:23,340 Se dice que la clase debajo, esta clase hija 190 00:13:23,340 --> 00:13:26,940 Extiende o hereda la otra 191 00:13:26,940 --> 00:13:32,279 Hereda en referencia a la herencia, el concepto de herencia 192 00:13:32,279 --> 00:13:34,799 Que es inheritance en inglés, creo 193 00:13:34,799 --> 00:13:39,220 Y extiende porque veremos que la palabra que se utiliza 194 00:13:39,220 --> 00:13:43,679 Para, digamos, relacionar las dos clases es extends 195 00:13:43,679 --> 00:13:46,840 En un cierto sentido es como si pillara esta clase 196 00:13:46,840 --> 00:13:50,000 Y la extendo con más información 197 00:13:50,000 --> 00:13:52,000 ¿Dudas? 198 00:13:53,840 --> 00:13:56,080 Esto es nomenclatura, ¿vale? 199 00:13:56,519 --> 00:13:58,840 Imaginémonos que tenga dos clases 200 00:13:58,840 --> 00:14:02,639 La clase taxi y la clase vehículo 201 00:14:02,639 --> 00:14:03,340 ¿Vale? 202 00:14:03,460 --> 00:14:05,860 Claramente vehículo será la clase que está arriba 203 00:14:05,860 --> 00:14:11,360 Y hago una clase taxi a partir de este vehículo que es más genérico 204 00:14:11,360 --> 00:14:15,720 Entonces, para indicar la relación entre estas dos clases 205 00:14:15,720 --> 00:14:17,059 Puedo decir todas estas cosas 206 00:14:17,059 --> 00:14:20,639 Es decir, que taxi hereda desde vehículo 207 00:14:20,639 --> 00:14:23,980 O que taxi extiende vehículo 208 00:14:23,980 --> 00:14:26,559 O que taxi es subclase de vehículo 209 00:14:26,559 --> 00:14:29,519 O que taxi es clase derivada 210 00:14:29,519 --> 00:14:31,559 O es clase hija 211 00:14:31,559 --> 00:14:33,539 Todo esto es para decir que taxi 212 00:14:33,539 --> 00:14:36,539 De alguna forma está relacionada con vehículo 213 00:14:36,539 --> 00:14:38,980 Porque importa todo lo que está allí 214 00:14:38,980 --> 00:14:40,480 Y añade algo más 215 00:14:40,480 --> 00:14:42,259 Y al revés 216 00:14:42,259 --> 00:14:46,799 Yo puedo decir que vehículo es superclase de taxi 217 00:14:46,799 --> 00:14:49,460 O es clase base de taxi 218 00:14:49,460 --> 00:14:51,500 O es clase padre de taxi 219 00:14:51,500 --> 00:14:52,000 ¿Vale? 220 00:14:52,159 --> 00:14:53,139 Este es hija, este es padre 221 00:14:53,139 --> 00:14:54,440 ¿Sí? 222 00:14:55,240 --> 00:14:57,399 Además, una cosa realmente interesante 223 00:14:57,399 --> 00:15:01,960 Es que la herencia crea un vínculo 224 00:15:01,960 --> 00:15:04,240 Una relación es un 225 00:15:04,240 --> 00:15:06,159 En inglés, is a 226 00:15:06,159 --> 00:15:08,940 ¿En qué sentido? 227 00:15:09,320 --> 00:15:12,460 Cuando yo digo que taxi hereda de vehículo 228 00:15:12,460 --> 00:15:16,500 Estoy diciendo que, sustantivamente, taxi es un vehículo 229 00:15:16,500 --> 00:15:20,440 La relación que tengo aquí 230 00:15:20,440 --> 00:15:24,340 Esta que me une, por ejemplo, taxi con vehículo 231 00:15:24,340 --> 00:15:26,620 Es que me está diciendo que taxi es un vehículo 232 00:15:26,620 --> 00:15:28,120 Pero algo más 233 00:15:28,120 --> 00:15:31,059 O aquí es autobús, es un vehículo 234 00:15:31,059 --> 00:15:32,379 Pero algo más 235 00:15:32,379 --> 00:15:35,379 El hecho que es un vehículo 236 00:15:35,379 --> 00:15:38,539 Me está diciendo que hace todo lo que puede hacer un vehículo 237 00:15:38,539 --> 00:15:41,000 Más algo más 238 00:15:41,000 --> 00:15:42,639 ¿Dudas? 239 00:15:46,360 --> 00:15:49,320 Esto está relacionado también con una cosa que veremos dentro de un rato 240 00:15:49,320 --> 00:15:51,779 Que es el operador instance of 241 00:15:51,779 --> 00:15:55,080 Que me permite saber si un determinado objeto 242 00:15:55,080 --> 00:15:57,220 Es un instante de una determinada clase 243 00:15:57,220 --> 00:15:58,340 ¿Vale? 244 00:15:58,779 --> 00:16:02,899 Si yo hago un objeto taxi 245 00:16:02,899 --> 00:16:05,720 ¿Taxi es una instancia de la clase taxi? 246 00:16:09,059 --> 00:16:11,039 ¿Taxi es una instancia de la clase vehículo? 247 00:16:12,039 --> 00:16:16,600 Porque taxi es un vehículo 248 00:16:16,600 --> 00:16:19,220 Por lo tanto, también 249 00:16:19,220 --> 00:16:21,659 Y esto me servía para saber 250 00:16:21,659 --> 00:16:25,159 Qué puedo hacer con una clase o no 251 00:16:25,159 --> 00:16:28,700 Si yo entiendo el taxi como vehículo 252 00:16:28,700 --> 00:16:30,659 Podré hacer las cosas que hace un vehículo 253 00:16:30,659 --> 00:16:33,039 Y si yo entiendo el taxi como un taxi 254 00:16:33,039 --> 00:16:34,440 Podré hacer todo lo que hace un vehículo 255 00:16:34,440 --> 00:16:35,360 Y algo más 256 00:16:35,360 --> 00:16:36,019 ¿Vale? 257 00:16:36,100 --> 00:16:38,259 Está claro que si yo he declarado un objeto vehículo 258 00:16:38,259 --> 00:16:40,779 Un objeto vehículo no puede hacer lo que hace taxi 259 00:16:40,779 --> 00:16:45,340 Porque vehículo es una instancia de vehículo 260 00:16:45,340 --> 00:16:48,639 Un objeto vehículo es una instancia de la clase vehículo 261 00:16:48,639 --> 00:16:52,360 Pero un objeto vehículo no es una instancia de la clase taxi 262 00:16:52,360 --> 00:17:00,490 Lo que tú quieras 263 00:17:00,490 --> 00:17:02,190 Es que tú tienes que 264 00:17:02,190 --> 00:17:05,230 Si tú estás hablando de taxi 265 00:17:05,230 --> 00:17:07,109 Pues creará todos tus taxis 266 00:17:07,109 --> 00:17:08,690 Sí, pero a un cierto momento 267 00:17:08,690 --> 00:17:12,369 y tienes un vehículo extra que no es ni un taxi ni un autobús 268 00:17:12,369 --> 00:17:15,470 y quieres simplemente tratarlo como vehículo genérico 269 00:17:15,470 --> 00:17:20,369 porque en tu sistema solo los taxis y los autobús tienen un comportamiento extra 270 00:17:20,369 --> 00:17:22,589 todos los otros vehículos son todos iguales 271 00:17:22,589 --> 00:17:25,789 pues entonces lo crearás como vehículo 272 00:17:25,789 --> 00:17:28,730 no es que tienes que 273 00:17:28,730 --> 00:17:33,029 tú puedes hacer las tres, los tres son objetos 274 00:17:33,029 --> 00:17:37,890 está claro que si yo creo un vehículo y luego le intento decir algo propio 275 00:17:37,890 --> 00:17:40,710 De taxi, como por ejemplo 276 00:17:40,710 --> 00:17:42,509 El getNumeroLicencia 277 00:17:42,509 --> 00:17:44,369 El vehículo no tiene número de licencia 278 00:17:44,369 --> 00:17:46,130 Es el taxi que tiene el número de licencia 279 00:17:46,130 --> 00:17:48,029 Según lo que está escrito aquí 280 00:17:48,029 --> 00:17:53,240 Cualquier vehículo le podré preguntar 281 00:17:53,240 --> 00:17:54,140 GetMatricula 282 00:17:54,140 --> 00:17:56,779 Pero solo los taxis tienen el número de licencia 283 00:17:56,779 --> 00:17:59,619 Entonces, si yo creo un taxi 284 00:17:59,619 --> 00:18:01,240 Le podré preguntar 285 00:18:01,240 --> 00:18:02,619 Si hay el número de licencia 286 00:18:02,619 --> 00:18:04,880 O tratarlo como si fuera un vehículo cualquiera 287 00:18:04,880 --> 00:18:06,200 Y decirle, dame tu matrícula 288 00:18:06,200 --> 00:18:08,259 Porque el taxi es un vehículo 289 00:18:08,259 --> 00:18:11,220 Si creo un vehículo genérico 290 00:18:11,220 --> 00:18:12,680 No le puedo la guayera a dir 291 00:18:12,680 --> 00:18:13,660 Dame tu número de licencia 292 00:18:13,660 --> 00:18:15,079 Porque tú no eres un subtaxi 293 00:18:15,079 --> 00:18:16,000 A revés no va 294 00:18:16,000 --> 00:18:18,000 ¿Verdad? 295 00:18:23,119 --> 00:18:26,039 Sintaxis de cómo creo una clase 296 00:18:26,039 --> 00:18:26,680 Muy fácil 297 00:18:26,680 --> 00:18:27,160 ¿Vale? 298 00:18:27,599 --> 00:18:28,960 Simplemente en Java 299 00:18:28,960 --> 00:18:29,480 ¿Vale? 300 00:18:29,579 --> 00:18:30,720 Tengo mi clase 301 00:18:30,720 --> 00:18:31,700 Public clase 302 00:18:31,700 --> 00:18:32,400 Lo que sea 303 00:18:32,400 --> 00:18:34,319 La clase hija 304 00:18:34,319 --> 00:18:35,579 Extends 305 00:18:35,579 --> 00:18:36,119 ¿Vale? 306 00:18:36,740 --> 00:18:37,640 Clase padre 307 00:18:37,640 --> 00:18:38,759 ¿Vale? 308 00:18:38,960 --> 00:18:39,880 Estoy diciendo simplemente 309 00:18:39,880 --> 00:18:40,980 Que la clase hija 310 00:18:40,980 --> 00:18:43,039 Extende la clase padre 311 00:18:43,039 --> 00:18:44,559 Esto sería taxi 312 00:18:44,559 --> 00:18:45,960 Extends 313 00:18:45,960 --> 00:18:48,059 Vehicle 314 00:18:48,059 --> 00:18:51,279 Y a partir de aquí 315 00:18:51,279 --> 00:18:52,940 Yo desarrollo mi clase 316 00:18:52,940 --> 00:18:54,819 Normal y corriente de toda la vida 317 00:18:54,819 --> 00:18:57,299 Pero aquí dentro 318 00:18:57,299 --> 00:18:59,200 En automático es como si 319 00:18:59,200 --> 00:19:01,279 Hubiese en un cierto sentido 320 00:19:01,279 --> 00:19:03,039 Copiado la clase padre 321 00:19:03,039 --> 00:19:05,299 Aquí arriba y luego desarrollo 322 00:19:05,299 --> 00:19:07,339 El resto 323 00:19:07,339 --> 00:19:13,880 Entonces, si la clase padre tiene matrícula 324 00:19:13,880 --> 00:19:16,039 Pues aquí dentro, dentro de esta clase 325 00:19:16,039 --> 00:19:19,480 Puede utilizar matrícula sin necesidad de declararla 326 00:19:19,480 --> 00:19:20,299 Porque ya existe 327 00:19:20,299 --> 00:19:23,619 Existe heredada desde la clase padre 328 00:19:23,619 --> 00:19:26,119 ¿Entienden? 329 00:19:27,619 --> 00:19:30,359 Es como si fuera un atributo de la clase 330 00:19:30,359 --> 00:19:31,000 ¿Vale? 331 00:19:31,779 --> 00:19:34,259 Esto siempre a nivel de declaración 332 00:19:34,259 --> 00:19:36,500 Imaginaos una estructura de este tipo 333 00:19:36,500 --> 00:19:38,319 Que hay una persona en general 334 00:19:38,319 --> 00:19:40,960 La persona puede ser empleados o alumnos 335 00:19:40,960 --> 00:19:43,019 Y los empleados pueden ser profesores 336 00:19:43,019 --> 00:19:44,039 ¿Vale? 337 00:19:44,299 --> 00:19:46,079 Entonces a nivel de declaración 338 00:19:46,079 --> 00:19:47,500 Sería una cosa de ese estilo 339 00:19:47,500 --> 00:19:49,900 Tengo un public class persona por algún lado 340 00:19:49,900 --> 00:19:50,880 Que me define la persona 341 00:19:50,880 --> 00:19:54,200 Una clase alumno que estende persona 342 00:19:54,200 --> 00:19:56,720 Y una clase empleado 343 00:19:56,720 --> 00:19:57,740 Que estende persona 344 00:19:57,740 --> 00:20:00,200 Y luego tengo una clase profesor 345 00:20:00,200 --> 00:20:01,180 Que estende empleado 346 00:20:01,180 --> 00:20:04,619 Entonces un profesor 347 00:20:04,619 --> 00:20:05,259 Por ejemplo 348 00:20:05,259 --> 00:20:07,700 Tendrá todo lo propio de un profesor 349 00:20:07,700 --> 00:20:09,759 Todo lo propio de un empleado 350 00:20:09,759 --> 00:20:11,519 Y todo lo propio de una persona 351 00:20:11,519 --> 00:20:16,859 Un profesor es un empleado 352 00:20:16,859 --> 00:20:19,220 Y el profesor también es una persona 353 00:20:19,220 --> 00:20:26,309 ¿Se entiende? 354 00:20:27,950 --> 00:20:28,630 Preguntas 355 00:20:28,630 --> 00:20:31,670 Vale 356 00:20:31,670 --> 00:20:38,480 Siempre una clase en Java 357 00:20:38,480 --> 00:20:40,400 Puede extender solo una clase 358 00:20:40,400 --> 00:20:41,200 ¿Vale? 359 00:20:41,420 --> 00:20:44,019 Entonces no hay lo que se llama herencia múltiple 360 00:20:44,019 --> 00:20:46,940 Hay lenguaje de programaciones que permite herencia múltiple 361 00:20:46,940 --> 00:20:48,039 Como por ejemplo C++ 362 00:20:48,039 --> 00:20:51,400 Pero en Java está limitado 363 00:20:51,400 --> 00:20:53,319 Tú puedes extender una sola clase 364 00:20:53,319 --> 00:20:56,619 Si tú tienes que extender dos clases 365 00:20:56,619 --> 00:20:57,700 Tienes un problema 366 00:20:57,700 --> 00:20:59,619 A ver cómo se hace 367 00:20:59,619 --> 00:21:01,140 O haces en cadena 368 00:21:01,140 --> 00:21:02,900 Esta extiende esta, esta extiende otra 369 00:21:02,900 --> 00:21:06,140 O haces utilizando otro mecanismo 370 00:21:06,140 --> 00:21:07,240 Que veremos más adelante 371 00:21:07,240 --> 00:21:08,539 Que son las interfaces 372 00:21:08,539 --> 00:21:11,809 ¿Las dudas? 373 00:21:17,980 --> 00:21:20,240 Vale, entonces este es un ejemplo de subclase 374 00:21:20,240 --> 00:21:22,059 Por ejemplo la clase alumno 375 00:21:22,059 --> 00:21:26,259 Esta sería toda la clase alumno que tiene sus atributos y métodos, ¿vale? 376 00:21:26,480 --> 00:21:30,880 Y la clase alumno tiene sus propios atributos y sus propios métodos aquí debajo 377 00:21:30,880 --> 00:21:36,059 Que son propios de la clase alumno, pero como hereda de la clase persona 378 00:21:36,579 --> 00:21:42,039 Pues incluye la parte aquí de arriba que está heredada directamente desde persona 379 00:21:42,039 --> 00:21:48,559 Entonces todos los atributos de persona y todos los métodos que tiene persona, ¿vale? 380 00:21:48,559 --> 00:21:50,559 Estos métodos de aquí, la parte 381 00:21:50,559 --> 00:21:53,079 Digamos, heredadas, no aparece en la clase 382 00:21:53,079 --> 00:21:55,140 Lo que yo pongo en la clase alumno 383 00:21:55,140 --> 00:21:56,759 Después de haberla declarada así 384 00:21:56,759 --> 00:21:59,059 ¿Vale? De public class está en persona 385 00:21:59,059 --> 00:22:01,240 Es solo la parte de abajo 386 00:22:01,240 --> 00:22:02,960 Porque la parte esta de aquí 387 00:22:02,960 --> 00:22:04,400 Se da por hecho, se da como si 388 00:22:04,400 --> 00:22:06,940 Existiera porque por algún lado 389 00:22:06,940 --> 00:22:08,759 Tendrá que haber la clase persona 390 00:22:08,759 --> 00:22:10,240 Donde hay el declarado 391 00:22:10,240 --> 00:22:12,640 Y todo el código que permita ver 392 00:22:12,640 --> 00:22:13,640 Lo que hace una persona 393 00:22:13,640 --> 00:22:16,460 Entonces yo 394 00:22:16,460 --> 00:22:18,039 En un main 395 00:22:18,039 --> 00:22:19,500 Creando un alumno 396 00:22:19,500 --> 00:22:20,980 Puedo pedir por ejemplo 397 00:22:20,980 --> 00:22:22,900 El apellido del alumno 398 00:22:22,900 --> 00:22:23,960 Y eso existe 399 00:22:23,960 --> 00:22:26,799 Hasta si en el código del alumno mismo 400 00:22:26,799 --> 00:22:30,000 En ningún lado he puesto string alumno 401 00:22:30,000 --> 00:22:32,000 Porque ya existe dentro de eso 402 00:22:32,000 --> 00:22:41,210 Pero allí ya 403 00:22:41,210 --> 00:22:43,490 Es un poquito más complejo 404 00:22:43,490 --> 00:22:45,289 Y vamos hacia otros temas 405 00:22:45,289 --> 00:22:46,109 Como polimorfismo 406 00:22:46,109 --> 00:22:48,990 Que todavía no sabemos muy bien 407 00:22:48,990 --> 00:22:50,430 Pero sí, en principio sí 408 00:22:50,430 --> 00:22:52,170 Como un alumno es una persona 409 00:22:52,170 --> 00:22:53,410 Si yo tengo un array de personas 410 00:22:53,410 --> 00:22:55,750 Puedo poner en un array de personas alumnos 411 00:22:55,750 --> 00:22:58,069 Lo que 412 00:22:58,069 --> 00:23:05,690 En un array de alumnos 413 00:23:05,690 --> 00:23:07,569 No puedo poner personas 414 00:23:07,569 --> 00:23:13,099 La alumna es una persona 415 00:23:13,099 --> 00:23:14,619 Una persona no es un alumno 416 00:23:14,619 --> 00:23:16,380 No tiene por qué ser un alumno 417 00:23:16,380 --> 00:23:18,660 Si yo tengo un array de alumnos 418 00:23:18,660 --> 00:23:21,579 Asumo que todos los objetos dentro de alumnos 419 00:23:21,579 --> 00:23:23,480 Pueden hacer, por ejemplo 420 00:23:23,480 --> 00:23:24,799 Imprime grupo 421 00:23:24,799 --> 00:23:26,880 Sin embargo 422 00:23:26,880 --> 00:23:28,220 Si yo le pongo una persona 423 00:23:28,220 --> 00:23:29,740 Personas no tienen imprimir grupo 424 00:23:29,740 --> 00:23:31,180 Entonces me diría, ¿qué es esto? 425 00:23:32,640 --> 00:23:33,240 Claro 426 00:23:33,240 --> 00:23:36,420 Tú dices que un alumno es una persona 427 00:23:36,420 --> 00:23:37,539 Una persona no es un alumno 428 00:23:37,539 --> 00:23:39,839 Puede no serlo 429 00:23:39,839 --> 00:23:40,019 ¿Sí? 430 00:23:41,779 --> 00:23:43,940 Vale, vamos a ver un ejemplo 431 00:23:43,940 --> 00:23:45,779 Con código 432 00:23:45,779 --> 00:23:47,619 ¿Vale? De esto, para ver 433 00:23:47,619 --> 00:23:49,900 De qué estamos hablando 434 00:23:49,900 --> 00:23:51,900 ¿Vale? Aquí estamos creando la clase 435 00:23:51,900 --> 00:23:52,859 Persona 436 00:23:52,859 --> 00:23:57,240 Y aquí tengo 437 00:23:57,240 --> 00:23:59,579 Por ejemplo 438 00:23:59,579 --> 00:24:02,319 Unos atributos 439 00:24:02,319 --> 00:24:04,460 Atributos nombre, apellido 440 00:24:04,460 --> 00:24:05,299 Y año de nación 441 00:24:05,299 --> 00:24:07,559 Fijaos 442 00:24:07,559 --> 00:24:09,299 Que para este caso 443 00:24:09,299 --> 00:24:11,319 Es puesto que los 444 00:24:11,319 --> 00:24:14,539 Los atributos 445 00:24:14,539 --> 00:24:15,640 Son protected 446 00:24:15,640 --> 00:24:17,960 Nosotros hemos visto nada 447 00:24:17,960 --> 00:24:19,559 Hemos visto public 448 00:24:19,559 --> 00:24:21,019 Y hemos visto private 449 00:24:21,019 --> 00:24:23,480 Este es otro 450 00:24:23,480 --> 00:24:26,339 Modificador 451 00:24:26,339 --> 00:24:27,299 Protected 452 00:24:27,299 --> 00:24:28,500 Que sostancialmente me dice 453 00:24:28,500 --> 00:24:30,980 Que estas cosas son visibles 454 00:24:30,980 --> 00:24:33,460 O dentro de la clase 455 00:24:33,460 --> 00:24:35,819 O dentro de 456 00:24:35,819 --> 00:24:38,099 Clases que heredan 457 00:24:38,099 --> 00:24:38,779 De esta clase 458 00:24:38,779 --> 00:24:39,660 ¿Vale? 459 00:24:39,920 --> 00:24:41,440 Además que dentro del paquete 460 00:24:41,440 --> 00:24:42,680 ¿Vale? Entonces 461 00:24:42,680 --> 00:24:44,559 Otras clases del paquete 462 00:24:44,559 --> 00:24:45,680 Otra clase 463 00:24:45,680 --> 00:24:47,200 Esta misma clase 464 00:24:47,200 --> 00:24:47,740 Y 465 00:24:47,740 --> 00:24:50,539 Clases que heredan de esta 466 00:24:50,539 --> 00:24:52,019 Si yo heredo desde esta clase 467 00:24:52,019 --> 00:24:53,779 Como si nombre fuera mío 468 00:24:53,779 --> 00:24:54,660 Y lo puedo utilizar 469 00:24:54,660 --> 00:24:56,079 ¿Sí? 470 00:24:56,079 --> 00:24:58,539 Esto no lo vimos antes 471 00:24:58,539 --> 00:25:00,539 Porque cuando lo vimos os lo nombré 472 00:25:00,539 --> 00:25:02,660 Pero os dije, claro, hasta que no sepamos 473 00:25:02,660 --> 00:25:04,579 Que es la herencia, esto no tiene sentido 474 00:25:04,579 --> 00:25:06,559 Ahora que empezamos a entender 475 00:25:06,559 --> 00:25:08,000 Que puede ser la herencia 476 00:25:08,000 --> 00:25:09,680 Pues entonces eso tiene sentido 477 00:25:09,680 --> 00:25:11,619 Sabemos que hay clases que estenden estas 478 00:25:11,619 --> 00:25:13,700 Y yo puedo decirle aquí un private 479 00:25:13,700 --> 00:25:16,200 Entonces una clase que me estende 480 00:25:16,200 --> 00:25:18,160 No tiene acceso a estas cosas 481 00:25:18,160 --> 00:25:19,700 O protected 482 00:25:19,700 --> 00:25:21,140 Entonces una clase que me estende 483 00:25:21,140 --> 00:25:22,900 Si tiene acceso directo a estas cosas 484 00:25:22,900 --> 00:25:26,759 Aquí tengo un public persona 485 00:25:26,759 --> 00:25:29,039 Public persona con nada 486 00:25:29,039 --> 00:25:29,519 ¿Vale? 487 00:25:29,640 --> 00:25:34,000 Si yo creo una persona sin darle ningún tipo de parámetros 488 00:25:34,000 --> 00:25:37,019 Me crea una persona que no tiene edad 489 00:25:37,019 --> 00:25:38,240 No tiene apellidos 490 00:25:38,240 --> 00:25:39,619 Y de nombre se llama anónimo 491 00:25:39,619 --> 00:25:46,019 Esto sobre escribe el constructor por defecto 492 00:25:46,019 --> 00:25:50,059 Y luego tenemos un constructor un poquito más complejo 493 00:25:50,059 --> 00:25:53,180 Que es persona con 494 00:25:53,180 --> 00:25:55,940 Dame nombre, dame apellido y dame edad 495 00:25:55,940 --> 00:25:58,019 Y yo crearé una persona 496 00:25:58,019 --> 00:26:00,279 Que como nombre tengo el nombre que me has dado 497 00:26:00,279 --> 00:26:02,640 Como apellido tiene el apellido que me has dado 498 00:26:02,640 --> 00:26:03,779 Y como año de nacimiento 499 00:26:03,779 --> 00:26:05,000 El año de nacimiento que me has dado 500 00:26:05,000 --> 00:26:06,619 Con esto torbático y todo 501 00:26:06,619 --> 00:26:08,119 ¿Dudas? 502 00:26:11,160 --> 00:26:13,700 Y una persona puede hacer esto 503 00:26:13,700 --> 00:26:15,160 Imprimir, ¿vale? 504 00:26:15,660 --> 00:26:17,880 Cuando una persona se imprime 505 00:26:17,880 --> 00:26:20,059 Ves que no es estático 506 00:26:20,059 --> 00:26:21,500 Este método, por lo tanto 507 00:26:21,500 --> 00:26:22,680 Se llama sobre un objeto 508 00:26:22,680 --> 00:26:25,859 Y lo que hará es inscribir todos los datos personales 509 00:26:25,859 --> 00:26:26,259 De esta 510 00:26:26,259 --> 00:26:28,500 De esta persona 511 00:26:28,500 --> 00:26:30,420 Pillando los valores 512 00:26:30,420 --> 00:26:32,519 De la persona propia, ¿vale? 513 00:26:32,519 --> 00:26:34,400 Entonces dice, nombre personal 514 00:26:34,400 --> 00:26:36,920 Datos personales, el nombre 515 00:26:36,920 --> 00:26:38,539 Seguido del apellido 516 00:26:38,539 --> 00:26:40,779 Seguido del año de nacimiento 517 00:26:40,779 --> 00:26:42,519 Los datos de esta persona 518 00:26:42,519 --> 00:26:44,640 ¿Dudas? 519 00:26:46,509 --> 00:26:47,049 Hasta aquí 520 00:26:47,049 --> 00:26:49,509 Poco más, ¿vale? 521 00:26:49,589 --> 00:26:52,369 Estaríamos en esta parte de aquí en un cierto sentido 522 00:26:52,369 --> 00:26:52,630 ¿Vale? 523 00:26:52,809 --> 00:26:55,210 Hemos definido la parte persona 524 00:26:55,210 --> 00:26:57,329 Hemos definido todo lo que llega aquí 525 00:26:57,329 --> 00:27:01,990 Ahora vamos a extender esta clase en la clase alumno 526 00:27:01,990 --> 00:27:04,529 Es aquí la parte nueva 527 00:27:04,529 --> 00:27:17,920 Esta es la clase alumno 528 00:27:17,920 --> 00:27:21,839 Fijaos que la clase alumno extende persona 529 00:27:21,839 --> 00:27:24,740 Entonces, este alumno es una persona 530 00:27:24,740 --> 00:27:27,839 Este alumno puede hacer todo lo que hace una persona 531 00:27:27,839 --> 00:27:29,839 Y tiene todos los datos de una persona 532 00:27:29,839 --> 00:27:30,640 ¿Vale? 533 00:27:31,380 --> 00:27:33,460 Pero además tiene 534 00:27:33,460 --> 00:27:34,640 Grupo 535 00:27:34,640 --> 00:27:36,720 Y tiene horario 536 00:27:36,720 --> 00:27:37,799 ¿Vale? 537 00:27:38,059 --> 00:27:39,339 Cosas que uno se me... 538 00:27:39,339 --> 00:27:43,539 Primera cosa nueva 539 00:27:43,539 --> 00:27:46,700 ¿Qué es esto? 540 00:27:52,049 --> 00:27:53,049 Tengo un constructor 541 00:27:53,049 --> 00:27:54,809 Public alumno 542 00:27:54,809 --> 00:27:56,430 Sin datos 543 00:27:56,430 --> 00:27:57,190 ¿Vale? 544 00:27:58,250 --> 00:27:59,910 Y de allí, súper 545 00:27:59,910 --> 00:28:01,410 ¿Qué hará este súper? 546 00:28:07,539 --> 00:28:08,259 ¿Qué hará el constructor? 547 00:28:08,400 --> 00:28:08,759 ¿Qué sentir? 548 00:28:12,089 --> 00:28:13,710 Lo que está haciendo este súper es 549 00:28:13,710 --> 00:28:18,029 Llama el constructor de mi superclase 550 00:28:18,029 --> 00:28:21,009 Con los parámetros que te pasan 551 00:28:21,009 --> 00:28:23,730 Entonces, este señor 552 00:28:23,730 --> 00:28:26,109 Cuando crea un alumno sin darle nada 553 00:28:26,109 --> 00:28:28,130 ¿Qué alumno creeré? 554 00:28:29,089 --> 00:28:34,829 El nombre anónimo sin nada 555 00:28:34,829 --> 00:28:35,769 Nombre anónimo 556 00:28:35,769 --> 00:28:37,849 Y todo el resto con datos por defecto 557 00:28:37,849 --> 00:28:41,630 Pero la idea es que 558 00:28:41,630 --> 00:28:44,450 Aquí por ningún lado dice que su nombre es anónimo 559 00:28:44,450 --> 00:28:46,390 Pero como esto 560 00:28:46,390 --> 00:28:48,609 Está tirando de esto 561 00:28:48,609 --> 00:28:51,289 ¿Vale? 562 00:28:51,450 --> 00:28:54,529 Super sin parámetros sería este constructor 563 00:28:54,529 --> 00:28:55,849 Este constructor 564 00:28:55,849 --> 00:28:58,009 Lo que me define es que su nombre es anónimo 565 00:28:58,009 --> 00:28:59,349 Por lo tanto 566 00:28:59,349 --> 00:29:00,970 Este código de aquí 567 00:29:00,970 --> 00:29:02,769 Llama el constructor 568 00:29:02,769 --> 00:29:04,450 Más arriba 569 00:29:04,450 --> 00:29:07,750 Sin parámetros está llamando ese constructor de ahí 570 00:29:07,750 --> 00:29:08,910 El nombre será anónimo 571 00:29:08,910 --> 00:29:11,230 Todo el resto se deja vacío 572 00:29:11,230 --> 00:29:13,829 O con valor por defecto 573 00:29:13,829 --> 00:29:15,309 Nul o cero 574 00:29:15,309 --> 00:29:17,309 O falso o lo que sea 575 00:29:17,309 --> 00:29:18,750 ¿Se entiende? 576 00:29:19,869 --> 00:29:20,990 Entonces, esto es como 577 00:29:20,990 --> 00:29:23,569 Desde la clase hija 578 00:29:23,569 --> 00:29:24,950 Desde la subclase 579 00:29:24,950 --> 00:29:27,509 Llamo a constructores 580 00:29:27,509 --> 00:29:29,009 De la clase madre 581 00:29:29,009 --> 00:29:30,269 De la superclase 582 00:29:30,269 --> 00:29:32,829 ¿Vale? Utilizando super 583 00:29:32,829 --> 00:29:35,450 Tened en cuenta, ahora tanto lo repitiré 584 00:29:35,450 --> 00:29:37,329 Pero que este super, si lo uso 585 00:29:37,329 --> 00:29:39,930 Tiene que ser el primer 586 00:29:39,930 --> 00:29:42,309 Comando del constructor 587 00:29:42,309 --> 00:29:44,230 La idea es que yo 588 00:29:44,230 --> 00:29:45,470 Si quiero crear un alumno 589 00:29:45,470 --> 00:29:47,069 Antes creo la persona 590 00:29:47,069 --> 00:29:49,369 Usando un constructor de la persona 591 00:29:49,369 --> 00:29:52,349 Y a partir de allí construyo todo lo que es un alumno 592 00:29:52,349 --> 00:29:54,109 Pero en un cierto sentido 593 00:29:54,109 --> 00:29:56,150 No puedo construir un alumno 594 00:29:56,150 --> 00:29:57,150 Sin construir una persona 595 00:29:57,150 --> 00:29:58,730 Porque un alumno es una persona 596 00:29:58,730 --> 00:30:03,869 ¿Cutas? 597 00:30:05,289 --> 00:30:06,609 Veamos un ejemplo 598 00:30:06,609 --> 00:30:07,990 Una pizca más complejo 599 00:30:07,990 --> 00:30:10,609 Si yo hago un alumno al que le paso 600 00:30:10,609 --> 00:30:12,910 Nombre, apellido y año de nacimiento 601 00:30:12,910 --> 00:30:15,230 Estos son justo los datos 602 00:30:15,230 --> 00:30:16,450 De 603 00:30:16,450 --> 00:30:19,390 Una persona 604 00:30:19,390 --> 00:30:20,970 ¿No? Pero nada más 605 00:30:20,970 --> 00:30:21,730 Que esto 606 00:30:21,730 --> 00:30:23,849 Esto debería ser 607 00:30:23,849 --> 00:30:28,089 El constructor 608 00:30:28,089 --> 00:30:29,049 ¿Vale? 609 00:30:29,690 --> 00:30:31,509 Dis.nombre, igual a nombre 610 00:30:31,509 --> 00:30:33,049 Dis.apellidos, apellidos 611 00:30:33,049 --> 00:30:34,490 Dis.nacimiento, nacimiento 612 00:30:34,490 --> 00:30:37,170 Pregunta, pero nombre, apellido, nacimiento 613 00:30:37,170 --> 00:30:38,750 En alumno nos parece 614 00:30:38,750 --> 00:30:40,369 ¿Cómo puedo hacer dis? 615 00:30:41,549 --> 00:30:42,630 Porque esto es extendiendo 616 00:30:42,630 --> 00:30:45,049 ¿Vale? Y como lo desestendo 617 00:30:45,049 --> 00:30:46,349 Pues accedería 618 00:30:46,349 --> 00:30:49,349 Oye, pregunta, ¿pero esto lo puedo hacer siempre? 619 00:30:49,450 --> 00:30:51,410 ¿Puedo hacer siempre dis.nombre desde alumno? 620 00:30:51,910 --> 00:30:53,890 Si está protected y no private 621 00:30:53,890 --> 00:30:56,470 Si está protected o public o lo que sea 622 00:30:56,470 --> 00:30:59,769 Si está private, por ejemplo, allá 623 00:30:59,769 --> 00:31:00,190 Pues no 624 00:31:00,190 --> 00:31:01,650 Esto me daría un error 625 00:31:01,650 --> 00:31:04,410 Me diría, no, no estás en la clase correcta 626 00:31:04,410 --> 00:31:10,359 Pero en vez de estar a reescribir otra vez 627 00:31:10,359 --> 00:31:13,200 Un código que ya está en persona 628 00:31:13,200 --> 00:31:14,819 Y cuidado, el constructor normalmente 629 00:31:14,819 --> 00:31:17,480 Para nosotros son constructores sencillos 630 00:31:17,480 --> 00:31:19,619 Pero podría ser 631 00:31:19,619 --> 00:31:22,559 Que yo tenga que hacer comprobaciones 632 00:31:22,559 --> 00:31:23,880 Sobre estos datos que me han dado 633 00:31:23,880 --> 00:31:25,980 A lo mejor no me están dando directamente el nombre 634 00:31:25,980 --> 00:31:27,400 Me están dando un código 635 00:31:27,400 --> 00:31:29,980 Que yo lo tengo que ir a buscar en una base de datos 636 00:31:29,980 --> 00:31:32,259 Y en esta base de datos encontraré una ficha 637 00:31:32,259 --> 00:31:34,539 Donde está su nombre, de ahí lo pillo 638 00:31:34,539 --> 00:31:34,759 ¿Vale? 639 00:31:35,019 --> 00:31:38,059 Entonces este código de aquí podría no ser trivial 640 00:31:38,059 --> 00:31:40,660 No ser fácil como el que hacemos nosotros 641 00:31:40,660 --> 00:31:41,940 Podría ser mucho código 642 00:31:41,940 --> 00:31:44,900 Y yo no lo quiero volver a reescribir aquí 643 00:31:44,900 --> 00:31:46,839 El mismo código de una clase que heredo 644 00:31:46,839 --> 00:31:47,859 Que ya tengo 645 00:31:47,859 --> 00:31:49,220 Y entonces 646 00:31:49,220 --> 00:31:52,119 Hago esto 647 00:31:52,119 --> 00:31:53,799 Super 648 00:31:53,799 --> 00:31:56,099 Llamo 649 00:31:56,099 --> 00:31:58,240 Al constructor 650 00:31:58,240 --> 00:32:00,640 De la clase superclase 651 00:32:00,640 --> 00:32:02,279 Pasándole 652 00:32:02,279 --> 00:32:04,859 Los parámetros 653 00:32:04,859 --> 00:32:06,559 Lo que hará 654 00:32:06,559 --> 00:32:08,160 Java, Java Tutor Machine 655 00:32:08,160 --> 00:32:11,059 Es ir a mirar la clase superior 656 00:32:11,059 --> 00:32:12,480 La clase padre 657 00:32:12,480 --> 00:32:15,019 Mirar si hay un constructor 658 00:32:15,019 --> 00:32:17,279 Que pilla justo estos tipos 659 00:32:17,279 --> 00:32:19,539 De atributos, de parámetros 660 00:32:19,539 --> 00:32:20,880 Y si lo hay 661 00:32:20,880 --> 00:32:22,960 Que si lo hay, es el segundo constructor 662 00:32:22,960 --> 00:32:24,640 Pues usa ese constructor 663 00:32:24,640 --> 00:32:26,980 Hace todo lo que tiene que hacer 664 00:32:26,980 --> 00:32:28,160 Vuelve aquí 665 00:32:28,160 --> 00:32:30,359 Y como se ha acabado el constructor, se ha acabado 666 00:32:30,359 --> 00:32:37,980 El concepto de 667 00:32:37,980 --> 00:32:39,380 Ahorrar 668 00:32:39,380 --> 00:32:42,380 Reutilizar código 669 00:32:42,380 --> 00:32:43,000 ¿Vale? 670 00:32:43,480 --> 00:32:45,059 No lo estoy reescribiendo aquí 671 00:32:45,059 --> 00:32:47,359 Y si mañana me doy cuenta que un error lo tengo 672 00:32:47,359 --> 00:32:49,460 Tanto en persona como en alumno 673 00:32:49,460 --> 00:32:50,940 Como en todas las clases de alumno 674 00:32:50,940 --> 00:32:52,279 Utilizo super 675 00:32:52,279 --> 00:32:54,559 Si lo arreglo en persona 676 00:32:54,559 --> 00:32:57,019 Automáticamente todos los que heredan y usan super 677 00:32:57,019 --> 00:32:58,099 Pueden solucionar 678 00:32:58,099 --> 00:33:01,660 Otra pregunta 679 00:33:01,660 --> 00:33:04,200 Hemos dicho que aquí 680 00:33:04,200 --> 00:33:08,960 Si nombre es privado 681 00:33:08,960 --> 00:33:10,940 No funcionaría 682 00:33:10,940 --> 00:33:13,119 Si nombre es protected o public 683 00:33:13,119 --> 00:33:13,920 O lo que sea 684 00:33:13,920 --> 00:33:15,299 Pues entonces sí funcionaría 685 00:33:15,299 --> 00:33:17,460 Pregunta para vosotros 686 00:33:17,460 --> 00:33:20,920 Si nombre, apellido y anonimación son privados 687 00:33:20,920 --> 00:33:23,579 ¿Esto funciona? 688 00:33:24,740 --> 00:33:34,119 Porque yo desde aquí no estoy tocando esos parámetros 689 00:33:34,119 --> 00:33:37,119 Esos parámetros son propios de la superclase 690 00:33:37,119 --> 00:33:42,779 Para tocarlos yo estoy llamando un constructor de la superclase 691 00:33:42,779 --> 00:33:45,200 Y al llamar al constructor de la superclase 692 00:33:45,200 --> 00:33:48,480 Él sí puede toquetear sus propios parámetros 693 00:33:48,480 --> 00:33:50,359 Porque estamos dentro de esa superclase 694 00:33:50,359 --> 00:33:52,960 Entonces 695 00:33:52,960 --> 00:33:55,859 Un método, una forma de 696 00:33:55,859 --> 00:33:58,680 Crear objetos de la superclase 697 00:33:58,680 --> 00:34:00,799 Sin tener acceso a sus atributos 698 00:34:00,799 --> 00:34:02,460 Es utilizar super 699 00:34:02,460 --> 00:34:05,000 ¿Tudas? 700 00:34:06,299 --> 00:34:07,059 ¿Preguntas? 701 00:34:08,440 --> 00:34:09,039 ¿Sigo? 702 00:34:10,340 --> 00:34:12,039 Entonces, ahora vamos a ver 703 00:34:12,039 --> 00:34:14,840 Otro, un tercero constructor de alumno 704 00:34:14,840 --> 00:34:16,079 Que pilla todo 705 00:34:16,079 --> 00:34:18,280 Nombra, apellido, año de nacimiento 706 00:34:18,280 --> 00:34:19,539 También el grupo y el horario 707 00:34:19,539 --> 00:34:20,780 Entonces, ¿qué hago? 708 00:34:21,280 --> 00:34:22,659 Pues, lo que hago es 709 00:34:22,659 --> 00:34:25,119 Pillar el 710 00:34:25,119 --> 00:34:26,840 ¿Cómo se llama esto? 711 00:34:27,840 --> 00:34:28,280 El 712 00:34:28,280 --> 00:34:31,480 Constructor de la clase superior 713 00:34:31,480 --> 00:34:33,760 Para hacer la parte 714 00:34:33,760 --> 00:34:35,699 Que es de persona 715 00:34:35,699 --> 00:34:37,820 ¿Vale? Lo mismo que he hecho ahora 716 00:34:37,820 --> 00:34:39,559 Entonces, este se irá 717 00:34:39,559 --> 00:34:41,340 Al otro constructor 718 00:34:41,340 --> 00:34:42,980 De la clase persona 719 00:34:42,980 --> 00:34:45,340 Hará todos los trabajos que son 720 00:34:45,340 --> 00:34:47,179 Incluidos si tiene que hacer 721 00:34:47,179 --> 00:34:49,119 en la base de datos, mandar un picture 722 00:34:49,119 --> 00:34:51,320 hará todo lo que hace el otro 723 00:34:51,320 --> 00:34:53,360 constructor, al haber hecho 724 00:34:53,360 --> 00:34:55,679 eso, una vez que ha creado la persona 725 00:34:55,679 --> 00:34:57,219 volverá aquí 726 00:34:57,219 --> 00:34:59,340 y seguirá adelante, y por ejemplo 727 00:34:59,340 --> 00:35:01,179 aquí, lo que hará es llamar 728 00:35:01,179 --> 00:35:03,139 el método ponGrupo con 729 00:35:03,139 --> 00:35:05,079 parámetros grupo y horario, y ahora 730 00:35:05,079 --> 00:35:07,000 veremos que es, este es un método 731 00:35:07,000 --> 00:35:08,340 de esta misma clase 732 00:35:08,340 --> 00:35:11,320 entonces, la idea sería esa, yo lo que voy 733 00:35:11,320 --> 00:35:12,219 a hacer es crear 734 00:35:12,219 --> 00:35:14,780 una instancia, entre comillas 735 00:35:14,780 --> 00:35:22,599 llamar al constructor de mi superclase, una vez que he creado la parte de superclase, 736 00:35:22,760 --> 00:35:29,360 pues añado la parte mía. Os recuerdo que esto, que la llamada a un supermétodo, a 737 00:35:29,360 --> 00:35:35,900 un superconstructor, pues es la primera llamada que se hace dentro de un constructor. La primera 738 00:35:35,900 --> 00:35:40,760 cosa que hago es construyo mi superclase y cuando mi superclase está construida, pues 739 00:35:40,760 --> 00:35:57,659 y luego los métodos propios de este mes de este de esta clase vale que es un grupo que lo que hace 740 00:35:57,659 --> 00:36:03,519 es aceptar el grupo aceptar el horario justo lo que me faltaba para poner aquí por lo tanto lo 741 00:36:03,519 --> 00:36:10,480 usa aquí vale y imprime grupo que me escribe una cosa así está claro que una persona no puede ni 742 00:36:10,480 --> 00:36:14,880 utilizar este método ni utilizar este método entre un alumno puede utilizar 743 00:36:14,880 --> 00:36:20,139 estos dos métodos acceder a grupo de horario y hacer todo lo que pueda hacer 744 00:36:20,139 --> 00:36:22,480 un pecho 745 00:36:24,099 --> 00:36:28,739 aquí estamos definiendo esta parte de abajo 746 00:36:28,739 --> 00:36:34,320 no está parte esta sala no definida en el otro 747 00:36:34,320 --> 00:36:41,440 y listo la persona se define la parte de arriba y en en este de aquí se define este 748 00:36:43,820 --> 00:36:50,139 entonces aquí hemos utilizado súper que es acceder a constructores o métodos de aspectos dudas 749 00:36:51,139 --> 00:37:05,460 como pruebo esta cosa pues por ejemplo un mail creó una persona vale que la vecina que en un 750 00:37:05,460 --> 00:37:16,780 persona luisa bla bla bla de 1978 y luego un alumno que es ahora puedo llamar por ejemplo 751 00:37:16,780 --> 00:37:23,099 un alumno punto con grupo modificaría fijaos que aquí estoy utilizando el mismo constructor 752 00:37:23,099 --> 00:37:28,800 que el constructor de persona vale no le estoy poniendo aquí el grupo el horario por lo tanto 753 00:37:28,800 --> 00:37:30,059 Esto estaría utilizando 754 00:37:30,059 --> 00:37:31,300 Este 755 00:37:31,300 --> 00:37:34,079 ¿Dónde está? Este de aquí 756 00:37:34,079 --> 00:37:36,840 ¿Vale? Que llama el constructor de persona 757 00:37:36,840 --> 00:37:38,360 Pero en un cierto sentido 758 00:37:38,360 --> 00:37:40,699 En estas dos llamadas 759 00:37:40,699 --> 00:37:42,780 Estoy utilizando el mismo 760 00:37:42,780 --> 00:37:43,639 Constructor 761 00:37:43,639 --> 00:37:45,059 No es verdad, pero 762 00:37:45,059 --> 00:37:48,820 Porque esto usa directamente el constructor de persona 763 00:37:48,820 --> 00:37:50,539 Y esto usa el constructor de alumno 764 00:37:50,539 --> 00:37:52,659 Que llama al constructor de persona 765 00:37:52,659 --> 00:37:53,800 ¿Vale? 766 00:37:54,219 --> 00:37:56,179 Sin embargo, luego a un alumno 767 00:37:56,179 --> 00:37:58,079 Puedo llamar las cosas de un alumno 768 00:37:58,079 --> 00:38:00,360 Si hiciera vecina.pongrupo 769 00:38:00,360 --> 00:38:01,679 Me daría un error 770 00:38:01,679 --> 00:38:03,119 Me decía en la clase 771 00:38:03,119 --> 00:38:05,059 Vecina es una 772 00:38:05,059 --> 00:38:06,980 Instancia de la clase persona 773 00:38:06,980 --> 00:38:09,179 La clase persona no está declarado 774 00:38:09,179 --> 00:38:11,079 El método pongrupo 775 00:38:11,079 --> 00:38:13,940 Si yo llamo vecina imprime 776 00:38:13,940 --> 00:38:15,800 Y un alumno imprime me funciona 777 00:38:15,800 --> 00:38:18,000 Y fijaos que imprime 778 00:38:18,000 --> 00:38:19,900 Es un método definido donde 779 00:38:19,900 --> 00:38:21,719 En persona 780 00:38:21,719 --> 00:38:23,179 Pero 781 00:38:23,179 --> 00:38:25,699 Vecina es persona y me vale 782 00:38:25,699 --> 00:38:29,659 Un alumno es alumno, pero alumno es persona 783 00:38:29,659 --> 00:38:31,179 Y por lo tanto me vale también 784 00:38:31,179 --> 00:38:35,500 Además, alumno, un alumno puede llamar también en primer grupo 785 00:38:35,500 --> 00:38:38,039 Lo que me saldría es algo así 786 00:38:38,039 --> 00:38:42,380 La persona escribiría esta cosa aquí 787 00:38:42,380 --> 00:38:45,139 El alumno escribiría lo mismo 788 00:38:45,139 --> 00:38:46,360 ¿Vale? 789 00:38:46,719 --> 00:38:49,900 Porque sostancialmente aquí estaría tratando el alumno 790 00:38:49,900 --> 00:38:51,820 Como si fuera una persona 791 00:38:51,820 --> 00:38:55,099 Y luego después, un alumno punto en primer grupo 792 00:38:55,099 --> 00:38:57,000 Me escribiría esta parte aquí final 793 00:38:57,000 --> 00:39:01,099 ¿Dudas? 794 00:39:07,730 --> 00:39:08,869 Esto ya lo hemos hecho 795 00:39:08,869 --> 00:39:10,690 ¿Qué pasaría si el alumno 796 00:39:10,690 --> 00:39:13,530 El atributo nombre fuera declarado private? 797 00:39:14,309 --> 00:39:15,469 Ya lo hemos hablado 798 00:39:15,469 --> 00:39:16,670 Y discutido entre nosotros 799 00:39:16,670 --> 00:39:18,949 Que si yo intento hacer esto 800 00:39:18,949 --> 00:39:20,630 Dentro de alumno 801 00:39:20,630 --> 00:39:21,349 ¿Vale? 802 00:39:22,489 --> 00:39:24,030 Explotaría, porque me diría 803 00:39:24,030 --> 00:39:27,190 No puedes acceder a él porque es privado 804 00:39:27,190 --> 00:39:28,590 Sin embargo 805 00:39:28,590 --> 00:39:31,449 Si llamo el super constructor 806 00:39:31,449 --> 00:39:33,130 Pues entonces me funciona 807 00:39:33,130 --> 00:39:35,250 Porque no lo estoy gestionando yo 808 00:39:35,250 --> 00:39:36,409 Está gestionando él 809 00:39:36,409 --> 00:39:38,489 Y os recuerdo que el constructor es public 810 00:39:38,489 --> 00:39:40,230 Es un poco 811 00:39:40,230 --> 00:39:43,409 Como cuando nosotros hacíamos 812 00:39:43,409 --> 00:39:45,989 Un elemento, un atributo private 813 00:39:45,989 --> 00:39:46,989 Y decíamos 814 00:39:46,989 --> 00:39:48,369 No puede acceder al atributo 815 00:39:48,369 --> 00:39:50,389 Pero si creo un método público 816 00:39:50,389 --> 00:39:52,630 Get es atributo 817 00:39:52,630 --> 00:39:53,869 O set es atributo 818 00:39:53,869 --> 00:39:55,690 Si que puedo manejarlo 819 00:39:55,690 --> 00:39:58,949 Pero la ventaja es que no lo manejo yo directamente 820 00:39:58,949 --> 00:40:00,869 Y voy allí y lo cambio a lo que me da la gana 821 00:40:00,869 --> 00:40:02,610 Sino que paso por un método 822 00:40:02,610 --> 00:40:04,710 Proporcionado por la misma clase 823 00:40:04,710 --> 00:40:07,469 Que me puede hacer los controles necesarios 824 00:40:07,469 --> 00:40:09,409 Para que el valor que tú me has dado 825 00:40:09,409 --> 00:40:10,690 Sea un valor correcto 826 00:40:10,690 --> 00:40:12,710 Si alguien me intenta poner como edad 827 00:40:12,710 --> 00:40:13,530 Menos 7 828 00:40:13,530 --> 00:40:17,269 A lo mejor dentro del método 829 00:40:17,269 --> 00:40:18,909 De creación me dice 830 00:40:18,909 --> 00:40:20,650 Si edad es negativo 831 00:40:20,650 --> 00:40:22,409 Pues ponle que no puede ser 832 00:40:22,409 --> 00:40:24,309 O explota o manda un error 833 00:40:24,309 --> 00:40:26,369 O ponle 0 por defecto 834 00:40:26,369 --> 00:40:27,710 O lo que sea 835 00:40:27,710 --> 00:40:35,329 Constructores private 836 00:40:35,329 --> 00:40:37,269 Ah si existen constructores private 837 00:40:37,269 --> 00:40:38,230 en un futuro 838 00:40:38,230 --> 00:40:44,809 un método private está pensado 839 00:40:44,809 --> 00:40:46,849 para que yo lo use solo dentro de esa clase 840 00:40:46,849 --> 00:40:48,469 entonces a otras clases 841 00:40:48,469 --> 00:40:51,050 incluidas las heredadas no lo pueden llamar directamente 842 00:40:51,050 --> 00:40:52,750 pero imagínate que yo 843 00:40:52,750 --> 00:40:54,690 llamo un método público y dentro 844 00:40:54,690 --> 00:40:55,849 de este método público 845 00:40:55,849 --> 00:40:57,730 usa este método privado 846 00:40:57,730 --> 00:41:00,429 pues como yo desde fuera estoy llamando el método público 847 00:41:00,429 --> 00:41:01,869 me funcionaría, solo que luego 848 00:41:01,869 --> 00:41:03,409 hace cosas dentro 849 00:41:03,409 --> 00:41:06,530 un método sería 850 00:41:06,530 --> 00:41:08,610 privado cuando tú quieres 851 00:41:08,610 --> 00:41:10,269 estar seguro al 100% 852 00:41:10,269 --> 00:41:12,309 que se ejecute ese método 853 00:41:12,309 --> 00:41:14,289 cuando alguien te llama, ¿vale? 854 00:41:14,369 --> 00:41:16,570 Entonces dices, cuando tú 855 00:41:16,570 --> 00:41:18,369 los dejas públicos, uno desde fuera 856 00:41:18,369 --> 00:41:20,489 podría utilizarlo o no. Si tú 857 00:41:20,489 --> 00:41:22,289 dices, cuando a mí me llaman, siempre 858 00:41:22,289 --> 00:41:24,590 llama a este método aquí que es privado interno 859 00:41:24,590 --> 00:41:26,590 aquí, pues ya no das 860 00:41:26,590 --> 00:41:27,030 opciones. 861 00:41:31,679 --> 00:41:32,800 Entonces esto 862 00:41:32,800 --> 00:41:37,239 esto es el error que os daría, ¿vale? 863 00:41:38,300 --> 00:41:38,960 Si fuera 864 00:41:38,960 --> 00:41:40,960 si desde alumno 865 00:41:40,960 --> 00:41:42,800 llamáis nombre 866 00:41:42,800 --> 00:41:44,860 y le decís que es 867 00:41:44,860 --> 00:41:46,800 que es private 868 00:41:46,800 --> 00:41:48,659 pues os diría, oye mira 869 00:41:48,659 --> 00:41:51,280 este atributo 870 00:41:51,280 --> 00:41:52,739 no es visible 871 00:41:52,739 --> 00:41:54,500 fijaos que dice de persona 872 00:41:54,500 --> 00:41:56,519 porque estamos hablando 873 00:41:56,519 --> 00:41:57,719 de persona 874 00:41:57,719 --> 00:42:05,059 hacemos un ejercicito