Saltar navegación

Herencia 1 - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 2 de febrero de 2024 por Stefano C.

7 visualizaciones

Descargar la transcripción

Entonces, hoy vamos a hablar de herencia y todo lo que digáis a partir de ahora, puesto que se está grabando, 00:00:00
implica que me habéis autorizado a grabar vuestras voces, ¿vale? 00:00:09
Entonces, hasta ahora, nosotros hemos estado hablando de objetos, hemos visto, aparte la parte de programación imperativa estructurada, ¿vale? 00:00:12
Que me permite, sustancialmente, hacer las cosas, hacer el SIFU, WILE, etcétera, etcétera. 00:00:25
Una vez que hemos visto esto aquí, hemos pasado al mundo de los objetos, a la programación orientada a objetos, 00:00:30
hemos cambiado de paradigma, hemos pasado a un mundo un poquito distinto, 00:00:35
donde ahora hacemos como conjuntos, paquetes, empaquetamos conceptos, ¿vale? 00:00:41
Empaquetamos juntos las características, los atributos, los valores propios de estas entidades, 00:00:50
de estas cosas que modelizamos, y el comportamiento de estas cosas. 00:01:00
Entonces, creamos las clases. Las clases son moldes, son plantillas que me definen cómo se puede crear un objeto de esa clase. 00:01:05
Es decir, cuáles son las características comunes y los comportamientos comunes a todos los objetos que yo estoy modelizando, 00:01:16
siendo luego cada uno de los objetos una entidad propia y distinta y separada de los otros objetos. 00:01:23
¿Vale? Entonces, nosotros tenemos la clase, tenemos el objeto que es una instancia de una clase, 00:01:30
ejemplo, la clase es coche, por lo tanto yo en la clase defino todo lo que es común a los coches, 00:01:35
como por ejemplo sea el color, la matrícula, la velocidad, qué sé yo, lo que me interesa para mi sistema, 00:01:45
sistemas distintos podrían ver el coche como cosas distintas, si yo estoy en una carrera, no me interesa el precio del coche, 00:01:51
si yo soy un vehículo... 00:01:58
el vendedor de coche, el vendedor de coche, pues me interesa el precio del coche, entonces lo pondré allí como característica. 00:01:59
Más los funcionamientos del coche, todos los coches pueden encenderse, todos los coches pueden viajar, 00:02:05
todos los coches pueden... y allí creo mis métodos. 00:02:12
A este punto, cuando he creado una plantilla, puedo con esa plantilla, con este molde, hacer varios objetos que serán todos con la misma estructura, 00:02:15
con los mismos comportamientos, pero los valores propios de cada atributo y de cada característica pues estará distinto. 00:02:24
Todos los cuadrados son parecidos, todos tienen un lado, pero habrá el cuadrado del lado 3, el cuadrado del lado 7, 00:02:29
que son dos cuadrados distintos. Es más, puede haber el cuadrado del lado 3 y otro cuadrado del lado 3 que son dos cuadrados distintos, 00:02:37
son dos instancias distintas. Si hago algo en uno de los dos cuadrados, no afecta el otro cuadrado. 00:02:44
¿Dudas hasta aquí? 00:02:50
Vale, dentro del mundo de la programación a objetos, está un... 00:02:52
concepto que es muy útil a la hora de modelizar cosas como hemos hecho nosotros hasta ahora. 00:02:59
Hemos, por ejemplo, hemos modelizado una escuela, dónde están los alumnos, las clases, etc. 00:03:09
En estos contextos, hay veces, y para dar una introducción, luego lo vemos con más calma, 00:03:15
en el que hay distintas clases que tienen algo parecido, 00:03:22
cuidado, clases distintas que tienen una estructura parecida, 00:03:29
es que yo me pregunto, ¿no podría esta estructura parecida, o condivisa, agruparla de alguna forma? 00:03:33
Hago un ejemplo para que me entendáis. 00:03:42
Alumno. ¿Alumno qué tiene de características? 00:03:44
Pues tiene nombre, tiene edad, y tiene... qué sé yo, no lo sé. 00:03:47
¿Ves? 00:03:53
Un ID. 00:03:55
Un ID. 00:03:56
Vale. 00:03:57
Profesor. 00:03:58
Profesor tiene nombre. 00:03:59
Sí, también. 00:04:01
Tiene edad. 00:04:02
Tiene un ID. 00:04:03
Entonces, profesor y alumno son muy parecidos. 00:04:05
Cuando yo voy a crear estas dos clases, la clase alumno y la clase profesor, 00:04:09
pues esta parte de aquí será prácticamente igual. 00:04:14
Estoy perdiendo tiempo reescribiendo la misma cosa. 00:04:18
Ahora, son tres variables, un minuto. 00:04:21
Pero si fuera un trozo así enorme de código que es igual en las dos... 00:04:23
En las dos clases, pues debería rehacerlo en las dos clases. 00:04:28
Es más, si luego encuentro un error, lo tengo que cambiar en las dos clases. 00:04:31
¿Sí? 00:04:36
Ahora, habrá también una parte que son distintos. 00:04:37
El alumno tiene notas. 00:04:40
El profesor tiene notas. 00:04:41
No. 00:04:43
Tendrá un array de asignaturas, por ejemplo. 00:04:44
Esa es una parte distinta. 00:04:47
Pues la idea de la herencia es que yo pueda crear una clase inicial, digamos así. 00:04:49
Una clase que se define como superclase. 00:04:55
O una clase padre, en un cierto sentido. 00:04:57
Donde defino, por ejemplo, persona. 00:05:01
Y digo que persona tiene nombre, tiene edad y tiene una idea. 00:05:05
Porque todas las personas tienen nombre, edad e idea. 00:05:12
Pero luego, desde esta persona, heredo una clase. 00:05:16
Creo una clase que hereda. 00:05:22
¿Vale? 00:05:25
Este alumno. 00:05:27
¿Qué quiere decir? 00:05:28
El alumno es una persona. 00:05:29
Y por lo tanto tiene todo lo que tiene una persona. 00:05:31
Pero estas cosas de aquí. 00:05:33
Y desde persona, yo digo, el profesor hereda también de persona. 00:05:38
El profesor es una persona. 00:05:44
El profesor tiene todo lo que tiene una persona. 00:05:45
Pero además tiene estas otras cosas aquí distintas de alumno. 00:05:48
Entonces estoy creando como una estructura. 00:05:52
En vez de tener que duplicar las cosas parecidas en varias clases. 00:05:55
Las cosas parecidas, las cosas iguales. 00:06:01
Las junto en una clase que será una superclase. 00:06:03
Y a partir de esta superclase, heredo las otras clases más específicas. 00:06:06
Entonces puedo crear la clase vehículo. 00:06:11
Y desde la clase vehículo, que es algo que se mueve en general. 00:06:13
Y tendrá allí dentro velocidad, por ejemplo. 00:06:17
Porque todos los vehículos tendrán una velocidad. 00:06:19
Pero luego desde vehículo puedo tirar coche. 00:06:21
Que además de velocidad tendrá número de puertas. 00:06:24
Y puedo tirar bicicleta. 00:06:29
Que además de velocidad tendrá cambio. 00:06:31
No sé si me explico lo que quiero decir. 00:06:35
¿Se entiende más o menos? 00:06:38
Esta es la idea de la herencia. 00:06:40
Ahora la vamos a ver un poquito más en detalle, más formal. 00:06:43
Es un mecanismo para la reutilización de software. 00:06:48
Es la idea de facilitar el poder reutilizar. 00:06:51
Software que ya he producido. 00:06:54
Y poderlo aplicar varias veces. 00:06:56
Ya lo tengo. 00:06:58
Lo puedo o reutilizar exactamente igual. 00:07:00
Entonces importo esa clase. 00:07:02
O si digo, mira, ya tengo una clase ya hecha por otro proyecto. 00:07:04
Pero además de lo que está allí. 00:07:08
Me faltaría añadir algunas cosas. 00:07:10
Pues entonces pillo esa clase. 00:07:12
La heredo. 00:07:14
Y añado lo que yo quiera. 00:07:16
Permite definir a partir de una clase, otras clases. 00:07:18
Que reutilicen todo o parte de los atributos. 00:07:21
O métodos de la clase de la que heredan. 00:07:23
¿Vale? 00:07:25
El ejemplo es persona. 00:07:26
La persona tiene un nombre y una edad. 00:07:28
¿Vale? 00:07:31
Y a partir de persona. 00:07:32
Yo puedo sacar. 00:07:34
Puedo heredar profesor. 00:07:35
Que tiene todo lo que tiene una persona. 00:07:37
O sea, nombre y edad. 00:07:39
Pero también tiene las asignaturas impartidas. 00:07:41
Y también de persona puedo heredar estudiante. 00:07:44
Que tiene todo lo que tiene una persona. 00:07:48
O sea que esta clase de aquí. 00:07:50
Es como si tuviera también nombre y edad. 00:07:51
Escrito aquí como atributos. 00:07:53
Y además tiene un array de enteros. 00:07:55
Que son normas. 00:07:57
¿Sí? 00:07:59
En estos. 00:08:01
Te estás guiando siempre por los atributos. 00:08:03
Pero puedes hacer. 00:08:05
Métodos. 00:08:07
Se hereda todo. 00:08:09
Esto es para simplificar. 00:08:11
Pero si persona tiene el método saludar. 00:08:13
Que te dice. Hola me llamo. 00:08:15
Y su nombre. 00:08:17
Ese método saludar también está en profesor. 00:08:19
Ese método saludar también está en estudiante. 00:08:21
¿Qué hará? 00:08:23
Pillo mi nombre y lo uso. 00:08:24
Como es que hay objetos. 00:08:25
Que cada uno tiene sus atributos. 00:08:27
Es totalmente distinto. 00:08:28
Pero en los métodos. 00:08:29
Luego hacen cosas bastante parecidas. 00:08:30
Ahí haría falta. 00:08:33
No lo sé. 00:08:35
Habría que ver el caso específico. 00:08:38
Concreto que me estás contando. 00:08:40
¿Vale? 00:08:42
Si. 00:08:43
Si en los métodos. 00:08:44
Usan la. 00:08:45
O sea. 00:08:46
Si hago aquí un método de profesor. 00:08:47
Que usa. 00:08:48
Asignatura impartidas. 00:08:49
Está claro. 00:08:50
Que esto no puede estar en persona. 00:08:51
Porque no existe esa cosa. 00:08:52
¿Vale? 00:08:53
Si aquí tengo un método. 00:08:54
Que solo usa. 00:08:56
Nombre edad. 00:08:57
Posiblemente no debería estar en profesor. 00:08:58
Si no debería estar en persona. 00:09:00
Ahora. 00:09:02
Puede haber un método específico. 00:09:03
De salud a profesor. 00:09:05
Que dice. 00:09:07
Hola soy el profesor. 00:09:08
Y su nombre. 00:09:09
Entonces eso debería estar en profesor. 00:09:10
Y no en persona. 00:09:12
Porque un estudiante no puede decir. 00:09:13
Hola soy profesor. 00:09:14
Porque no es un profesor. 00:09:16
Entonces. 00:09:17
Y ya veremos. 00:09:18
Lo que se llama. 00:09:19
La prescriptura. 00:09:20
De métodos. 00:09:21
Todavía pronto. 00:09:22
Si. 00:09:23
No es una referencia. 00:09:24
Es una herencia. 00:09:25
¿Vale? 00:09:26
No es que yo creo. 00:09:27
Un objeto persona. 00:09:28
Por un lado. 00:09:29
Y luego un objeto profesor. 00:09:30
El objeto es profesor. 00:09:31
¿Vale? 00:09:32
Pero. 00:09:33
Tú estás utilizando. 00:09:34
Este nombre. 00:09:35
Si. 00:09:36
De arriba. 00:09:37
Si. 00:09:38
De arriba. 00:09:39
De arriba. 00:09:40
De arriba. 00:09:41
De arriba. 00:09:42
De arriba. 00:09:43
De arriba. 00:09:44
De arriba. 00:09:45
De arriba. 00:09:46
De arriba. 00:09:47
De arriba. 00:09:48
De arriba. 00:09:49
Sí. 00:09:50
Pero. 00:09:51
Tú estás cambiando. 00:09:52
Pero esto no son tres objetos. 00:09:53
Hazlo distinto. 00:09:54
Esta es una estructura de clases. 00:09:55
Cuando yo creo un objeto. 00:09:57
Creo. 00:09:59
O una instancia de profesor. 00:10:00
O una instancia de estudiante. 00:10:01
O una instancia de persona. 00:10:02
Si creo una instancia de persona. 00:10:03
Tendrá sólo estos dos. 00:10:04
Si creo una instancia de profesor. 00:10:05
Tendrá estos dos. 00:10:06
Y esto. 00:10:07
Entonces puedo usar los tres. 00:10:08
Entonces tengo una forma de modificar desde el profesor. 00:10:09
Persona. 00:10:10
Es que no. 00:10:11
No. 00:10:12
Esto. 00:10:13
No. 00:10:14
No es. 00:10:15
No es. 00:10:16
Es que no. 00:10:17
No lo pillan 00:10:18
No son objetos, son clases 00:10:21
Entonces, ¿qué quiere decir modificar? 00:10:23
Si yo creo un objeto profesor 00:10:25
¿Puedo cambiar mi nombre? Sí 00:10:27
Porque profesor es una persona 00:10:29
Y tiene nombre 00:10:32
¿Puedo cambiar el nombre de persona? 00:10:32
¿Qué quiere decir? Yo soy una persona 00:10:35
¿Puedo cambiar nombre? Sí 00:10:37
¿Puedo hacer que 00:10:40
Un profesor 00:10:43
Entre en un método 00:10:45
Donde se pide un objeto persona? 00:10:48
00:10:51
¿Puedo hacer que una persona 00:10:51
Entre en un método donde se pide 00:10:54
Un objeto profesor? No 00:10:56
Porque el profesor 00:10:57
Es una persona 00:11:00
Una persona no es un profesor 00:11:01
¿Sí? 00:11:03
¿Se entiende? 00:11:06
¿Cuándo se usan las herencias? 00:11:10
¿Para qué sirve la herencia? 00:11:12
¿Cuándo? 00:11:14
Es útil, ¿vale? 00:11:15
Hay dos 00:11:16
Supuestos, ¿vale? 00:11:16
Especialización y generalización 00:11:20
Que es la misma cosa vista 00:11:22
Desde dos perspectivas, ¿vale? 00:11:23
La especialización es 00:11:26
Tengo la clase coche 00:11:27
Como especialización de vehículo 00:11:29
Es decir, tengo una clase general 00:11:32
Una clase 00:11:34
Que me viene bien 00:11:35
Porque yo estoy haciendo un proyecto 00:11:37
Y ya existe una clase 00:11:40
Más general de lo que estoy modelizando yo 00:11:41
Que tiene 00:11:44
Parte de lo que yo quiero modelizar 00:11:45
Me falta algo 00:11:48
Pero todo lo que está aquí me vale 00:11:49
Entonces lo que yo hago es 00:11:51
Pillo esta clase 00:11:52
Heredo desde esta clase una clase nueva 00:11:53
Y añado solo las cosas extra 00:11:56
Las cosas que me faltaban 00:11:59
En esta nueva clase 00:12:00
Entonces tengo la clase vehículo 00:12:02
Que ya existe 00:12:05
Digo, pero yo quiero hacer un programa 00:12:05
Sobre coches 00:12:08
Pues me pillo vehículo 00:12:09
Que ya tiene todas las características de un vehículo 00:12:11
Y todas las cosas importantes de un vehículo 00:12:13
Y los métodos de un vehículo 00:12:14
Y lo especializo en un coche 00:12:15
¿Sí? 00:12:18
Entonces, un coche es un vehículo 00:12:19
Hace todo lo que puede hacer un vehículo 00:12:21
Tiene todas las características de un vehículo 00:12:24
Más la que yo añado 00:12:25
¿Sí? 00:12:27
Entonces, tenemos que desarrollar una nueva clase 00:12:30
Que se parece mucho a una que tenemos 00:12:32
Pero necesita información adicional 00:12:34
Tengo ya vehículo 00:12:36
Pero vehículo no tiene el número de puertas 00:12:38
Que tiene 00:12:40
Y yo en mi coche quiero saber cuántas puertas tiene 00:12:41
Por lo tanto, yo tengo que desarrollar una nueva clase 00:12:44
Por lo tanto, pillo vehículo 00:12:44
Lo heredo 00:12:45
Creo coche 00:12:47
Que hereda de vehículo 00:12:47
Y a ese punto le añado a coche 00:12:48
Número de puertas 00:12:51
¿Sí? 00:12:52
La solución es crear una clase derivada 00:12:54
O clase hija 00:12:58
O subclase 00:12:59
Estos son todos sinónimos 00:12:59
¿Vale? 00:13:01
Que le añadimos la nueva funcionalidad 00:13:02
O los nuevos valores 00:13:05
O cosas por el estilo 00:13:06
Y evito de reescribir todo el código de vehículo 00:13:07
El código de vehículo ya lo tengo 00:13:10
Añado solo lo extra 00:13:12
¿Sí? 00:13:14
Esto es especializar 00:13:15
Vehículo es general 00:13:16
Lo especializo en algo 00:13:17
Y mañana hago un proyecto sobre bicicletas 00:13:19
Pues también pillo vehículo 00:13:22
Y especializo una nueva clase 00:13:24
Que es bicicleta 00:13:26
Que tendrá lo propio de 00:13:26
Que tiene una bicicleta 00:13:28
Que no todos los vehículos tienen 00:13:29
¿Se entiende? 00:13:31
No necesariamente 00:13:40
Porque tú vas heredando 00:13:41
Cuanto quieras 00:13:44
Ve y cosa 00:13:45
Y la cosa tiene un identificador 00:13:46
Y nada más 00:13:49
¿Vale? 00:13:50
Dentro de cosa metes vehículo 00:13:51
Que también tiene 00:13:52
Además del identificador 00:13:54
Una velocidad 00:13:55
Dentro vehículo pones coche 00:13:56
¿Vale? 00:13:58
Que dentro además de lo que tiene anterior 00:13:58
Pues tiene también una cosa más 00:14:01
Que es el número de puertas 00:14:04
¿Vale? 00:14:05
Y luego desde coche 00:14:06
Puedes decir 00:14:07
No sé 00:14:08
Especialización más de coche 00:14:09
Todo terreno 00:14:11
Que tiene un identificador 00:14:13
Y tiene también 00:14:14
La posibilidad de si están 00:14:15
Activadas las cuatro ruedas 00:14:17
Sí o no 00:14:20
Y todo terreno pues 00:14:22
Me explico 00:14:23
Y puedes ir especializando 00:14:24
Cuanto te da la gana 00:14:27
Sí, claro 00:14:28
Si vas heredando por ejemplo 00:14:28
También 00:14:30
Habías dicho 00:14:31
Además de atributos 00:14:32
Pues heredas también los métodos 00:14:33
Lo vas heredando 00:14:35
Con los métodos 00:14:36
Entonces ya tienes que tener más 00:14:37
Porque cuando tú heredas 00:14:38
Tienes una relación 00:14:39
Con la clase 00:14:41
La superclase 00:14:43
De yo soy una superclase 00:14:44
Si yo soy alumno 00:14:46
Y heredo de persona 00:14:48
Yo soy una persona 00:14:49
Hago todo lo que puede hacer una persona 00:14:51
Un alumno es una persona 00:14:52
Contrariamente a cuando pensamos 00:14:54
Veis esto 00:14:57
Lo metéis en Youtube 00:14:57
Un alumno puede hacer cualquier cosa 00:14:59
Que hace una persona 00:15:03
Que es una persona 00:15:03
¿Sí? 00:15:04
Ahora una persona no puede hacer 00:15:05
Todo lo que hace un alumno 00:15:07
¿Sí? 00:15:09
No puedo decir a una persona 00:15:10
¿Cuáles son tus notas? 00:15:11
Que si tú no eres un alumno 00:15:13
Las notas no las tienes 00:15:14
¿Sí? 00:15:15
Y ahora 00:15:17
De alumno 00:15:17
Podría especializar todavía más 00:15:18
Y poner alumno de primero 00:15:20
O alumno de segundo 00:15:23
Es ello 00:15:24
Si quisiera buscar 00:15:25
Diferencias entre estas cosas 00:15:26
¿Sí? 00:15:28
Y puedo heredar 00:15:30
Cuántas veces me da la gana 00:15:31
Está claro que 00:15:32
Cuanto más subo 00:15:33
En niveles de herencia 00:15:34
Más voy 00:15:36
Hacia el general 00:15:37
¿Sí? 00:15:38
No puedo especializar 00:15:39
La especialización es hacia abajo 00:15:40
No hacia arriba 00:15:42
¿Sí? 00:15:42
¿Sí? 00:15:43
¿Sí? 00:15:43
Pero 00:15:44
Nadie me prohíbe 00:15:44
O sea 00:15:45
No es que cuando hago una clase 00:15:45
Que luego heredaré 00:15:47
Tiene que ser súper general 00:15:49
Es que siempre que hago 00:15:50
Coche 00:15:52
Tengo que empezar de vehículo 00:15:53
¿Vale? 00:15:54
Podría ser que 00:15:55
Mi programa va de quesos 00:15:56
Y no es que tengo que empezar de 00:15:58
Comida 00:16:00
Que hereda quesos 00:16:01
Que hereda lácteos 00:16:03
Que hereda quesos 00:16:05
Empezó de queso 00:16:06
Y luego de allí 00:16:06
Heredaré lo que tengo que heredar 00:16:07
¿Sí? 00:16:09
El nivel de abstracción 00:16:10
Lo decido yo 00:16:11
En base al sistema 00:16:12
Que estoy haciendo 00:16:13
¿Sí? 00:16:13
¿Sí? 00:16:14
Vale 00:16:15
La otra opción 00:16:16
Es lo mismo 00:16:19
Pero visto al revés 00:16:20
¿Vale? 00:16:22
O sea 00:16:23
Aquí yo tenía 00:16:23
Algo que ya existía 00:16:24
Pero me faltaba algo más 00:16:26
Tengo vehículo 00:16:28
Pero vehículo no tiene 00:16:29
Lo que tiene un coche 00:16:30
Pues entonces me quedo con el coche 00:16:31
Importo todo 00:16:32
Heredo todo lo que está 00:16:34
En un 00:16:35
En un vehículo 00:16:36
Y luego le añado 00:16:38
Los específicos 00:16:39
Concretos 00:16:41
Que me servían 00:16:41
Cosas al revés 00:16:42
Yo tengo 00:16:44
Sería la clase vehículo 00:16:45
Como generalización de coche 00:16:47
¿Vale? 00:16:48
Tengo un conjunto 00:16:49
Numeroso de clases 00:16:50
Tengo varias clases 00:16:51
Donde si las miro 00:16:52
Se hace lo mismo 00:16:54
En todas estas clases 00:16:55
¿Vale? 00:16:57
Imaginamos al revés 00:16:58
No tengo persona 00:16:59
Tengo alumno 00:16:59
Que tiene nombre 00:17:01
Y edad 00:17:02
Luego tengo profesor 00:17:03
Que tiene nombre 00:17:05
Y edad 00:17:05
Luego tengo 00:17:06
Que se yo 00:17:07
Conserje 00:17:08
Que tiene nombre 00:17:08
Y edad 00:17:09
Luego tengo 00:17:10
Padre 00:17:11
¿No? 00:17:12
En sentido de 00:17:13
Los profesores 00:17:13
Padres 00:17:14
Padre, madre 00:17:14
O lo que sea 00:17:15
Que tiene nombre 00:17:15
Edad 00:17:17
Entonces en cierto momento 00:17:18
Digo 00:17:19
Pero todos estos 00:17:19
Tienen lo mismo 00:17:20
¿Por qué no hago 00:17:21
No pillo la parte 00:17:23
Igual de todos estos 00:17:24
Me creo una clase 00:17:26
Más general 00:17:27
Persona 00:17:28
Donde pongo 00:17:29
Nombre, edad 00:17:30
Y luego todos estos 00:17:31
Heredan de ella 00:17:33
Con solo sus cosas 00:17:34
Específicas 00:17:36
Es lo mismo 00:17:36
Pero vista al revés 00:17:37
Aquí tengo algo general 00:17:39
Y luego especificando 00:17:40
Y aquí tengo muchas cosas 00:17:42
Específicas 00:17:43
Que se parecen en algo 00:17:44
Saco lo que es común 00:17:46
A todos 00:17:48
Y me creo una nueva clase 00:17:48
Más general 00:17:50
De la que luego herederán 00:17:50
Es muy parecida 00:17:52
No es la misma 00:17:58
Porque son los dos lados 00:18:00
Aquí ya tienes algo general 00:18:02
Y vas especificando 00:18:04
Aquí ya tienes muchos específicos 00:18:05
Y vas generalizando 00:18:08
El herencia 00:18:10
¿Sí? 00:18:12
Son los dos supuestos 00:18:13
En lo que 00:18:15
Usas herencia 00:18:16
¿Sí? 00:18:17
Porque a lo mejor 00:18:18
Aquí 00:18:19
Tú no te has dado cuenta 00:18:20
Tú has empezado un sistema 00:18:21
Y has puesto alumnos 00:18:23
Estás haciendo un sistema 00:18:24
De gestión de alumnos 00:18:25
Vale, pongo alumnos 00:18:26
Esto funciona tres años 00:18:27
De repente dices 00:18:29
Ay mira 00:18:29
En este sistema 00:18:30
¿Por qué no ponemos también 00:18:31
Los profesores? 00:18:32
Que sería útil para mantener 00:18:33
Pongamos los profesores 00:18:34
Y te creas otra 00:18:35
Otra clase completamente distinta 00:18:36
Y luego 00:18:38
Y llega un momento 00:18:38
Que ves que tienes 00:18:39
Ostras, todas estas clases 00:18:40
Que dices 00:18:41
Pero esta 00:18:41
Esta parte 00:18:42
De código 00:18:43
Cuando lo tengo que mantener 00:18:44
Cuando lo tengo que modificar 00:18:45
Lo tengo que modificar 00:18:47
En todas estas clases 00:18:48
Porque se repite 00:18:49
Exactamente el mismo código 00:18:50
Pues hago una clase general 00:18:51
Pongo ese código allí 00:18:53
Y ahora 00:18:54
Todos se redan de allí 00:18:54
Y si lo modifico 00:18:55
Lo modifico una vez 00:18:56
Solo 00:18:57
¿Sí? 00:18:57
Dudas hasta aquí 00:18:59
Entonces 00:19:00
Imaginaos que esto 00:19:06
Sea una situación 00:19:10
Sin herencia 00:19:12
¿Vale? 00:19:13
En este caso 00:19:13
Vamos a poner 00:19:14
A ver 00:19:15
Nupam 00:19:17
Vale 00:19:20
Sin herencia 00:19:23
Estoy en esta situación de aquí 00:19:24
Tengo 00:19:25
La clase 00:19:26
Recurso 00:19:27
Un recurso genérico 00:19:28
Que tiene su nombre 00:19:29
Descripción 00:19:30
Que puede decir su nombre 00:19:31
Puede decir su descripción 00:19:32
Esta es como get 00:19:33
¿Vale? 00:19:34
En cierto sentido 00:19:35
Luego tengo 00:19:36
Como recurso más específico 00:19:37
La aula 00:19:38
¿Vale? 00:19:39
Que es un recurso 00:19:40
Educativo 00:19:41
¿Vale? 00:19:42
Que tiene su nombre, su descripción, tiene también la localización de donde está la obra. 00:19:43
Puede decir su nombre, decir su descripción y decir la localización de donde está. 00:19:48
Vale, que no me da. 00:19:52
Y luego tengo el ordenador, que es otro recurso, otro tipo de recurso. 00:19:53
Y veo que tiene nombre, descripción, sistema operativo, decir nombre. 00:19:56
Y de repente me doy cuenta que esta parte de aquí, la parte azul, 00:20:01
efectivamente es la misma en todos los recursos que tengo. 00:20:06
Entonces lo que digo es, vale, muy bien. 00:20:10
Me voy a crear la clase recurso que tenga esta parte de aquí, que es la parte común. 00:20:12
Y luego en aula y ordenador le digo, oye aula, tú heredas de recursos, 00:20:20
entonces estás importando todo esto y dentro de aula solo pongo las cosas nuevas, 00:20:25
las cosas específicas del aula, que no tendrá un ordenador. 00:20:31
Y en la parte de ordenador en vez de sistema operativo, decir sistema operativo. 00:20:35
¿Sí? 00:20:40
Entonces la idea es un poquito de eso. 00:20:42
Sirve para organizar mejor el código y al mismo tiempo para poder reutilizar parte de código sin grandes problemas. 00:20:43
¿Sí? 00:20:51
¿Cómo se hace esto? 00:20:54
Aquí no hay. 00:20:57
Esta es la sintaxis. 00:21:00
Public class aula extends recurso. 00:21:02
Esta parte de extends recurso que se pone después del public. 00:21:08
Public class aula me está diciendo, yo soy una clase que hereda de esta otra clase. 00:21:12
¿Sí? 00:21:19
Entonces la clase aula hereda de recurso. 00:21:20
La clase recurso es una super clase de aula. 00:21:23
La clase recurso es una clase padre. 00:21:27
La clase aula es una clase hija. 00:21:30
¿Sí? 00:21:32
O madre, no sé. 00:21:33
¿En el caso de que la clase de aula hereda de recursos, heredas todo? 00:21:36
¿O heredas todo? 00:21:42
¿O heredas todo? 00:21:42
¿En el caso de que la clase de aula hereda de recursos, heredas todo? 00:21:42
No, no. 00:21:45
Claro, entonces no serviría. 00:21:45
Porque mi localización sería a recursos, ¿no? 00:21:47
Claro, pero es aula que extiende recursos. 00:21:50
No recursos que extiende aula. 00:21:54
Es esto que pilla esto. 00:21:58
No esto que pilla esto. 00:22:03
Por eso solo ha pillado lo que estaba en azul, ¿no? 00:22:04
Sí. 00:22:07
Y de hecho, si te acuerdas cómo era. 00:22:08
La aula tenía que tener todo lo azul, más inicialización y localización. 00:22:12
Ahora, en este caso, lo que estoy haciendo es heredar lo azul desde arriba 00:22:17
y aquí dentro tengo solo las cosas específicas que no tiene un recurso en general. 00:22:21
Todos los recursos tienen estas cuatro cosas, 00:22:26
pero el aula en particular tiene también la localización 00:22:29
y el ordenador tiene el sistema operativo. 00:22:31
¿Sí? 00:22:34
Los atributos y métodos que aparecen en azul en la clase padre 00:22:36
se repiten en la clase hija. 00:22:39
En vez de no es necesario repetir el código, 00:22:42
basta decir que la clase extiende y ya está. 00:22:44
Por el caso del derecho, ¿vale? 00:22:47
Sería la idea que, imaginaos que de repente viene mi jefe y dice 00:22:48
esto de llamarlo descripción no me gusta, 00:22:52
llámalo visión. 00:22:54
Pues aquí yo tengo que entrar entre clases 00:22:58
y cambiar descripción en visión. 00:23:00
Pues aquí entro en una sola, lo cambio aquí 00:23:03
y en automático se refleja en todas las demás. 00:23:05
¿Sí? Entonces es más organizado. 00:23:08
Y es más, si ahora sale... 00:23:10
Si ahora sale móvil como nuevo recurso que puedo utilizar, 00:23:12
pues lo único que tengo que hacer es heredar desde recurso 00:23:15
y poner aquí otra cosa. 00:23:20
¿Vale? 00:23:22
O mejor todavía, si sale móvil que tiene número de teléfono, 00:23:22
heredo desde ordenador. 00:23:27
Porque un móvil tiene un sistema operativo. 00:23:29
¿Entendéis lo que quiero decir? 00:23:34
Entonces, un ordenador no tiene el número de teléfono, 00:23:36
pero el teléfono sí, es un ordenador con número de teléfono. 00:23:39
Para mí. 00:23:41
Entonces heredaría desde aquí abajo. 00:23:43
Haría public class móvil extends ordenador. 00:23:45
¿Sí? 00:23:51
¿Tú das? 00:23:53
Si móvil es de ordenador, 00:23:55
ya está incluido en la herencia de recurso. 00:23:59
Claro. 00:24:01
Porque móvil es un ordenador que es un recurso... 00:24:03
Vale. 00:24:07
... 00:24:09
Nomenclatura, que ya os lo he dicho varias veces, 00:24:11
cómo se dicen las cosas, ¿vale? 00:24:13
Si yo tengo vehículo, 00:24:15
esta situación, ¿vale? 00:24:19
Tengo un vehículo 00:24:21
que tiene matrícula, modelo y potencia en CV 00:24:23
y tiene métodos getter aquí. 00:24:29
Y luego desde vehículo hereda taxi y autobús 00:24:31
que tienen cosas distintas. 00:24:35
Por ejemplo, el autobús tiene número plazas 00:24:37
y el taxi tiene número, no sé qué es esto, licencia. 00:24:39
¿Vale? 00:24:43
¿Cómo hablo de esto? 00:24:45
Pues puedo decir que taxi 00:24:49
hereda las variables y métodos de vehículo. 00:24:51
¿Sí? 00:24:53
Puedo decir que taxi extiende vehículo 00:24:55
o taxi hereda de vehículo. 00:24:57
¿Sí? 00:24:59
Que taxi es una subclase de vehículo. 00:25:01
Taxi 00:25:03
es una clase derivada de vehículo. 00:25:05
Taxi 00:25:07
es una clase hija de vehículo. 00:25:09
Todo esto son las distintas, ¿vale? 00:25:11
Se entiende la misma cosa. 00:25:13
Puedo decir que vehículo es superclase de taxi. 00:25:15
Puedo decir que vehículo es clase base. 00:25:17
Yo esto lo he oído muy poco. 00:25:19
De taxi. 00:25:21
Vehículo es una clase padre de taxi. 00:25:23
¿La clase femenina debe ser madre? 00:25:25
No lo sé, ¿vale? 00:25:27
Esto son cosas informáticas. 00:25:29
Yo no tengo nada que ver con esto, ¿eh? 00:25:31
No lo elijo yo. 00:25:33
La herencia realiza la relación es un. 00:25:35
Esto es importante. 00:25:37
¿Vale? 00:25:39
El taxi es un vehículo. 00:25:41
El autobús 00:25:43
es un vehículo. 00:25:45
El móvil es un 00:25:47
ordenador que es un 00:25:49
recurso. 00:25:51
¿Sí? 00:25:53
Todo lo que... 00:25:55
Allá donde yo necesite 00:25:57
un vehículo, 00:25:59
puedo poner un taxi. 00:26:01
¿Sí? 00:26:03
Si yo tengo el método 00:26:05
mueve y pilla 00:26:07
vehículo, vehículo, 00:26:09
pues ahí dentro puedo poner un taxi. 00:26:11
Porque taxi es un vehículo. 00:26:13
¿Se entiende? 00:26:15
Vale. 00:26:17
Si te exhalas, entonces 00:26:21
está aquí. Lo hemos visto antes, ¿vale? 00:26:23
Para heredar... 00:26:25
No sé si vendrá después. Ya os lo digo. 00:26:27
En Java 00:26:29
se puede heredar una sola clase. 00:26:31
heredo de una clase sola. 00:26:35
No puedo heredar de dos clases. 00:26:37
Puedo decir, soy móvil, heredo de 00:26:39
ordenador y de 00:26:41
vehículo. 00:26:43
No lo puedo hacer. 00:26:45
En C++, por ejemplo, sí. 00:26:47
C++ permite 00:26:49
herencia múltiple. 00:26:51
Sin embargo, Java no. 00:26:53
Siempre una sola herencia. 00:26:55
Y se hace así. Los modificadores, 00:26:57
public class, nada class, private class, 00:26:59
lo que sea, 00:27:01
la clase hija, 00:27:03
extend, la superclase 00:27:05
o la clase aparte. 00:27:07
¿Dudas? 00:27:09
Declaración de clase derivada. 00:27:15
Vamos a ver esta estructura aquí. 00:27:17
Tenemos una persona 00:27:19
como nivel más genérico. 00:27:21
Tenemos empleado y alumno. 00:27:23
Y entre los varios empleados tengo 00:27:25
un profesor. 00:27:27
Aquí podría tener también conserje, que es un empleado. 00:27:29
Un profesor es un empleado, que es una 00:27:31
persona. Un alumno es una persona, pero no es 00:27:33
un empleado. 00:27:35
¿Sí? Entonces, ¿cómo se declara 00:27:37
public class persona? 00:27:39
Y pondría aquí todo lo que es 00:27:41
propio de una persona. El nombre, la edad 00:27:43
y saludar. 00:27:45
Luego haría public class alumno 00:27:47
extend persona. 00:27:49
Eso quiere decir que no tengo que volver a escribir aquí 00:27:51
nombre, edad 00:27:53
y cosas por el estilo, porque ya las tengo 00:27:55
siendo una persona. Pondría simplemente 00:27:57
la rey de notas. 00:27:59
Public class empleado 00:28:01
extend persona. Aquí también 00:28:03
pondría, por ejemplo, si eres un empleado, 00:28:05
seguramente tendrás un sueldo, pues pondría 00:28:07
cantidad de sueldo. Y luego 00:28:09
tendría public class profesor que extend 00:28:11
empleado, donde pondría 00:28:13
las asignaturas que imparte. 00:28:15
Entonces, 00:28:17
si yo me meto en un profesor, tengo un objeto 00:28:19
profesor, él puede mirar las asignaturas 00:28:21
que imparte, puede mirar 00:28:23
el sueldo que tiene, puede mirar su nombre, 00:28:25
puede mirar su edad. 00:28:27
Tiene todo esto a disposición. 00:28:29
Si yo miro a un empleado, no le puedo 00:28:31
pedir a un empleado qué asignaturas imparte. 00:28:33
Porque empleado no tiene las asignaturas. 00:28:35
Sí. 00:28:37
Sí. 00:28:39
Si yo, por ejemplo, en vez de 00:28:41
estudiar alguna privada, 00:28:43
a la hora de utilizar, por ejemplo, 00:28:45
atributos, por ejemplo, de personas. 00:28:47
Tengo unos atributos... Clases privadas. 00:28:49
Dejamos las clases privadas. 00:28:51
Dejamos las clases privadas. 00:28:53
Dejamos las clases privadas. 00:28:55
Dejamos las clases privadas. 00:28:57
No recuerdo si 00:28:59
la acepta private. Posiblemente sí. 00:29:01
Pero todavía no la hemos usado. 00:29:03
Si fuera privada, solo 00:29:05
la clase privada... 00:29:07
Ahora dudo, ¿eh? 00:29:09
Si se puede hacer una clase privada. 00:29:11
Pero si se pudiera hacer, solo se 00:29:13
utilizaría dentro de la misma 00:29:15
clase. No se puede hacer en la clase privada. 00:29:17
Los modificadores, ahora no me acuerdo. 00:29:19
Luego lo probamos. 00:29:21
Seguramente si no le pones public, 00:29:23
solo puedes utilizarlas en el mismo package. 00:29:25
No puedes acceder desde... 00:29:27
Pero dentro del mismo 00:29:29
package podrías heredarlos de tal la gana. 00:29:31
El problema es si quieres... 00:29:33
Imagínate que persona no sea public. 00:29:35
Para poder heredar de personas 00:29:37
tiene que estar en el mismo package. 00:29:39
Si no, no la puedes ver. 00:29:41
¿Sí? 00:29:43
Subclase. 00:29:47
Esto es un poquito un esquema 00:29:53
de cómo sería 00:29:55
una clase alumno. 00:29:57
¿Vale? 00:29:59
Aquí están los atributos, aquí están los métodos. 00:30:01
Una clase alumno. 00:30:03
¿Vale? 00:30:05
Es como una clase que tiene dentro 00:30:07
una persona 00:30:09
con los atributos 00:30:11
y los métodos 00:30:13
de la persona, 00:30:15
pero además tiene 00:30:17
otras cosas. 00:30:19
¿Sí? 00:30:21
Entonces esto sería un objeto alumno 00:30:23
y un objeto alumno es como si tuviera dentro 00:30:25
un objeto persona, no son objetos distintos, 00:30:27
es el mismo objeto, pero tiene la estructura 00:30:29
parecida a un objeto persona, 00:30:31
más las cosas extras 00:30:33
de la estructura del alumno. 00:30:35
Es por esa razón que si yo 00:30:37
tuviera un método que dice 00:30:39
añade 00:30:41
a la lista 00:30:43
y pilla como parámetro persona, 00:30:45
yo le puedo pasar 00:30:47
tranquilamente un alumno 00:30:49
porque todo lo que tiene alumno 00:30:51
lo tiene una persona. 00:30:53
Las cosas de una persona 00:30:55
están en alumno. 00:30:57
Al revés no. 00:30:59
Si yo tengo un añade alumno 00:31:01
que pilla un alumno, 00:31:03
no le puedo pasar una persona. 00:31:05
Porque a lo mejor en este método 00:31:07
se hace referencia a un horario 00:31:09
o un grupo que una persona no tiene. 00:31:11
Pero es que los alumnos sí. 00:31:13
Entonces tengo que pasarle al alumno. 00:31:15
O sea que 00:31:17
una clase hija 00:31:19
se puede usar 00:31:21
allá donde se pide una clase padre, 00:31:23
una superclase. 00:31:25
Al revés no. 00:31:27
No puedo usar una clase 00:31:29
hija, una subclase 00:31:31
donde... 00:31:33
Perdón, no puedo utilizar 00:31:35
una superclase 00:31:37
donde se pide una subclase. 00:31:39
¿Entonces al crear un alumno 00:31:45
estás creando también una persona? 00:31:47
En un cierto sentido sí, 00:31:49
pero no, no son objetos distintos, 00:31:51
son objetos solos. 00:31:53
Pero ahora cuando veremos los constructores 00:31:55
al crear un alumno 00:31:57
tú llamas el constructor de persona 00:31:59
y luego añades cosas. 00:32:01
Claro, 00:32:05
es que cuando 00:32:07
un alumno es una persona 00:32:09
entonces tú harás todo lo que hace una persona normal, 00:32:11
preparas todo para que pueda usar 00:32:13
sus métodos, para que tenga sus variables 00:32:15
y luego a esto le extiendes con 00:32:17
algo más. 00:32:19
Extends con algo más. 00:32:21
¿Sí? 00:32:23
¿Dudas? 00:32:25
Vale. 00:32:27
Entonces, esta es 00:32:29
Protected Vida, el ejemplo que me 00:32:31
hacías antes. 00:32:33
Entonces, yo tengo public 00:32:35
class persona, vale, 00:32:41
y aquí creo 00:32:43
public persona, 00:32:47
persona, no sé 00:32:49
qué me quiere decir, 00:32:51
posible de la... 00:32:53
Ah, vale, sí, perdón. 00:32:55
No, no era tu ejemplo, es esto. 00:32:57
¿Os acordáis los modificadores? 00:32:59
Que había cuatro modificadores, 00:33:01
había public, había protect, 00:33:03
había package y había 00:33:05
private. 00:33:07
Y que uno de ellos os he dicho 00:33:09
no podemos entender qué es esto. 00:33:11
¿Sí? 00:33:13
Pues ahora lo podemos entender. 00:33:15
La diferencia 00:33:17
entre protected y package 00:33:19
como modificadores 00:33:21
de visibilidad, es que en package 00:33:23
lo pueden ver sólo otras 00:33:25
clases del mismo package. 00:33:27
¿Sí? Entonces, a este 00:33:29
a nombre sólo accede, 00:33:31
pueden acceder directamente 00:33:33
a la variable nombre 00:33:35
objetos que son 00:33:37
instancias de clases que pertenecen 00:33:39
al mismo package de persona. 00:33:41
Sin embargo, si es protected, 00:33:45
además de los que están 00:33:47
en el mismo package, pueden acceder 00:33:49
también cualquier clase 00:33:51
que extiende 00:33:53
persona, o sea que hereda 00:33:55
de persona. 00:33:57
Si yo hago en otro package completamente 00:33:59
distinto, class alumno 00:34:01
extends persona, 00:34:03
que es pública y por lo tanto 00:34:05
la puedo ver, ahora yo puedo acceder 00:34:07
a nombre, apellido y cosas por esto. 00:34:09
También. Con protected 00:34:15
desde el paquete o que hereda. 00:34:17
Con package sólo 00:34:19
del paquete, 00:34:21
o sea que si te hereda, ¿no? 00:34:23
Private sólo 00:34:25
dentro de la clase, 00:34:27
public desde donde está. 00:34:29
¿Sí? Cuatro niveles 00:34:31
de visibilidad de 00:34:33
estas 00:34:35
cosas. También los métodos 00:34:37
tienen lo mismo. 00:34:39
Y otras cosillas. 00:34:43
Constructores. 00:34:45
¿Vale? Existe 00:34:47
el constructor super. 00:34:49
Este es un constructor que 00:34:53
lo que te está diciendo es llama 00:34:55
al constructor de mi superclase. 00:34:57
Si yo soy un alumno 00:34:59
y extendo persona, 00:35:01
cuando llamo super, 00:35:03
estoy llamando el constructor 00:35:05
de persona. 00:35:07
¿Sí? ¿Con qué parámetros? 00:35:09
Lo uso aquí, con ningún 00:35:11
parámetro. Entonces me llamará el constructor 00:35:13
que no tiene parámetro. 00:35:15
Si yo llamo super de tres, 00:35:17
me estará llamando 00:35:19
aquel constructor de la clase, 00:35:21
de la superclase, que sea, 00:35:23
que tenga como parámetros 00:35:25
int. 00:35:27
¿Entiende? 00:35:29
Veamos aquí 00:35:31
un ejemplo. 00:35:33
¿Pueden heredar constructores? 00:35:35
Ehhh... 00:35:37
En un 00:35:39
cierto sentido, sí. Pero no lo 00:35:41
heredas como tal. Porque 00:35:43
el constructor de persona no es el mismo 00:35:45
que el constructor de alumno. Son dos cosas distintas. 00:35:47
Pero desde alumno, lo que puedes 00:35:49
hacer es utilizar los constructores 00:35:51
de tu par. 00:35:53
Que es aquí. 00:35:55
Yo tengo 00:35:57
un constructor alumno sin parámetros 00:35:59
que llama super sin parámetros. 00:36:01
Y no hace nada más. 00:36:03
Esto quiere decir que 00:36:05
cuando creo un alumno, 00:36:07
la primera cosa que hago es llamar 00:36:09
el constructor 00:36:11
de persona, porque es tendo 00:36:13
persona, ¿vale? 00:36:15
Que no tiene parámetros. Es decir, que la primera 00:36:17
cosa que se hace cuando se está 00:36:19
creando esto, es ejecutar 00:36:21
esto. 00:36:23
Entonces este alumno tendrá como nombre 00:36:27
anónimo. 00:36:31
¿Se entiende? 00:36:33
Sin embargo, yo puedo hacer otro 00:36:35
constructor de alumno 00:36:39
que sea este de aquí. 00:36:41
Alumno pilla 00:36:43
string, nombre, apellido, 00:36:45
año de nacimiento, 00:36:47
grupo y horario. 00:36:49
Pilla todo esto este constructor. 00:36:51
Y luego ¿qué hace? 00:36:53
Pues llama 00:36:55
super 00:36:57
con nombre, apellido, 00:36:59
año de nacimiento. 00:37:01
¿Sí? ¿Y qué es esto? 00:37:03
Pues esto es 00:37:05
este 00:37:07
constructor de aquí. 00:37:09
¿Vale? Constructor que tiene nombre, 00:37:13
apellido, año de nacimiento. 00:37:15
Y entonces esta parte del constructor lo que 00:37:17
hará es rellenarme estas 00:37:19
características, que son las de persona. 00:37:21
Me está construyendo un objeto 00:37:23
persona. Pero 00:37:25
no es que hay dos objetos, es el mismo objeto. 00:37:27
¿Vale? Una vez 00:37:29
que haya acabado de 00:37:31
construir la parte de persona, 00:37:33
que sería como hacer esto. 00:37:35
¿Sí? La parte de persona. 00:37:41
A ese punto 00:37:43
sigo adelante 00:37:45
con otra cosa. O sea que 00:37:53
pon grupo, le pone el grupo de horario. 00:37:55
Sería esto. 00:37:57
Pon grupo es esta, 00:37:59
es este metodito de aquí. 00:38:01
Entonces se ejecutará este 00:38:03
metodito de aquí, que lo que hará es 00:38:05
comprobar que el grupo no sea nulo y lo así. 00:38:07
¿Sí? 00:38:09
Si os fijáis, 00:38:11
es como decir, la parte 00:38:13
que no es mía propia, 00:38:15
la parte que heredo, 00:38:17
pues que se encargue la superclase 00:38:19
de hacer. 00:38:21
Y una vez que ha hecho la parte de superclase, 00:38:23
pues yo me ocupo 00:38:25
de la parte propia mía específica. 00:38:27
¿Sí o no? 00:38:33
Cuidado, 00:38:35
si yo hiciera esto, 00:38:37
public alumno 00:38:39
que pilla estas tres cosas 00:38:41
y la hace así. 00:38:43
Funcionaría. 00:38:45
¿Sí? 00:38:47
No estoy usando super aquí. 00:38:49
Lo estoy haciendo directamente. 00:38:51
Esto funcionaría igualmente. 00:38:53
¿Vale? 00:38:55
Pero, 00:38:57
imaginaos que el nombre fuera 00:38:59
privado. 00:39:01
Esto funcionaría. 00:39:03
No. 00:39:05
Porque yo desde 00:39:07
como privado de arriba, 00:39:09
pues no podría acceder 00:39:11
al privado de 00:39:13
persona. 00:39:15
Pero con esto sí funcionaría. 00:39:17
Porque no estoy llamando 00:39:21
el atributo privado. 00:39:25
Estoy llamando el constructor, 00:39:27
que es público. 00:39:29
Y entonces sí funcionaría. 00:39:31
Sí. 00:39:35
Super es siempre la primera línea. 00:39:41
Sí. 00:39:43
Si quiero usar super, 00:39:45
la primera línea del constructor tiene que ser 00:39:47
llamada al constructor. 00:39:49
Porque es como un poco, yo estoy creando un alumno 00:39:51
y el primer paso de un alumno es crear una persona. 00:39:53
Una vez que tengo la persona ya le pongo la nota. 00:39:55
¿Sí? 00:39:57
De hecho, si no lo pongo, 00:39:59
él en automático me hace 00:40:01
un super de este tipo. 00:40:03
Así. 00:40:05
Si no pongo nada 00:40:07
en el constructor de alumno y alumno 00:40:09
hereda de persona, 00:40:11
la primera cosa que me hace es esto. 00:40:13
En automático. 00:40:15
Hasta si no lo escribo. 00:40:17
¿Sí? 00:40:19
Y veremos 00:40:21
que esto hace para... 00:40:23
Luego haremos pruebas y que te puede dar algún 00:40:25
problema. 00:40:27
¡Prueba! 00:40:29
Esto es para probar los alumnos. 00:40:31
¿Vale? Entonces veamos cómo 00:40:33
funciona. 00:40:35
Su Main. 00:40:37
Creo la persona vecina. 00:40:39
¿Vale? Que se llama Luisa y no sé 00:40:41
qué más. 00:40:43
Y luego creo un alumno. 00:40:45
¿Vale? Perfecto. 00:40:47
Ahora, un alumno 00:40:49
le puedo poner el grupo. 00:40:51
Si imprimo vecina, 00:40:53
me da datos 00:40:55
personales, bla bla bla. 00:40:57
Si imprimo un alumno, 00:40:59
me imprime 00:41:01
este de aquí. 00:41:03
El primer grupo dice este de aquí. 00:41:05
Fijaos que imprime 00:41:07
no está definido en alumno. 00:41:11
Aquí por ningún lado 00:41:13
encontráis imprime. 00:41:15
¿Vale? 00:41:17
Es un método 00:41:19
heredado 00:41:21
de persona. 00:41:23
Pero lo puedo llamar 00:41:25
tanto 00:41:27
sobre 00:41:29
una persona como sobre un alumno. 00:41:31
Porque el alumno 00:41:33
es una persona. 00:41:35
¿Sí? 00:41:37
Sin embargo, no podría hacer 00:41:39
vecina punto imprime grupo. 00:41:41
Porque imprime grupo es 00:41:43
un método 00:41:45
de alumno. 00:41:47
Entonces todos los alumnos pueden hacer 00:41:49
imprime grupo, pero las personas 00:41:51
no pueden hacer imprime grupo. 00:41:53
Porque una persona no es un alumno. 00:41:55
El alumno es una persona. 00:41:57
¿Dudas? 00:41:59
Es un poco como si 00:42:03
todo lo que está aquí en persona 00:42:05
lo hubiese copiado 00:42:07
y pegado 00:42:09
por aquí. 00:42:11
Donde debería estar. 00:42:13
¿Sí? 00:42:15
Lo he importado. 00:42:17
Lo he reescrito. 00:42:19
¿Dudas sobre esto? 00:42:21
Eso es lo que 00:42:23
decíamos antes. 00:42:25
¿Qué pasaría si el atributo nombre fuera declarado private? 00:42:27
O sea, sí. 00:42:29
En persona 00:42:33
el string nombre lo he puesto como privado. 00:42:35
Vale. 00:42:37
Si yo en 00:42:39
alumno 00:42:41
hiciera un constructor 00:42:43
así, que pilla nombre, apellido y nacimiento 00:42:45
e intentar hacer this.nombre 00:42:47
igual a nombre, esto explotaría. 00:42:49
Porque dentro 00:42:51
de alumno no está nombre. 00:42:53
El nombre está en persona. 00:42:55
Que es otra clase. Y como es privado 00:42:59
solo se puede utilizar en esa clase. 00:43:01
Fuera, desde 00:43:03
alumno 00:43:05
no se puede utilizar nombre. 00:43:07
Sí. 00:43:09
Si el get y el set son públicos. 00:43:11
O package o protected. 00:43:13
Vale. Sin embargo, 00:43:15
si hago así, 00:43:17
esto me funciona perfectamente. 00:43:19
Porque aquí no estoy accediendo al nombre. 00:43:21
Aquí no estoy accediendo 00:43:23
a la variable nombre. 00:43:25
Aquí estoy accediendo a este 00:43:27
constructor de aquí. 00:43:31
Que es público. 00:43:33
Por lo tanto, lo puedo llamar tranquilamente 00:43:35
desde una clase externa. 00:43:37
Y luego lo que hace es cambiarme el nombre. 00:43:39
Pero claro, lo cambia el nombre 00:43:41
desde dentro persona. 00:43:43
Y persona puede acceder al nombre 00:43:45
porque aún si es privado. 00:43:47
Porque es dentro de la misma clase. 00:43:49
¿Se entiende? 00:43:51
Más o menos. 00:43:53
Luego esto hay que practicarlo. 00:43:55
Un ejercicio. 00:43:57
Hacemos el ejercicio. 00:43:59
Vamos a parar aquí y hacemos el ejercicio. 00:44:05
Subido por:
Stefano C.
Licencia:
Reconocimiento - No comercial - Compartir igual
Visualizaciones:
7
Fecha:
2 de febrero de 2024 - 14:33
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
44′ 12″
Relación de aspecto:
4:3 Hasta 2009 fue el estándar utilizado en la televisión PAL; muchas pantallas de ordenador y televisores usan este estándar, erróneamente llamado cuadrado, cuando en la realidad es rectangular o wide.
Resolución:
960x720 píxeles
Tamaño:
135.27 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid