Herencia 1 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
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
Sí
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
El
00:14:56
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
No
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
Ah
00:19:16
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
Yo
00:26:33
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
un
00:32:45
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
00:39:23
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