Saltar navegación

Clases Abstractas y Polimorfismo - 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 19 de enero de 2026 por Stefano C.

20 visualizaciones

Descargar la transcripción

Voy a grabar esta clase, por lo tanto, como es muy útil y la miráis constantemente, pues si habláis me autorizáis a grabar vuestra voz, así luego la escucháis otra vez cuando los ponéis en casa y miráis muchas veces estos vídeos, que hemos comprobado ahora, miráis mogollón estos vídeos. 00:00:00
Muy bien. Enhorabuena. 00:00:22
Pasas, tratas. 00:00:26
Hay veces, en esta cosa de la herencia, en que creamos una jerarquía de objetos que, pero, me viene mal crear. 00:00:27
¿Qué quiere decir esto? 00:00:45
Imaginaos lo que hemos hecho el viernes. 00:00:46
Viernes hemos hecho un ejercicio sobre figuras geométricas. 00:00:50
Vale, fenomenal. 00:00:54
Cuando yo hablo de un cuadrado, yo sé que es un cuadrado, sé cómo se trata un cuadrado. 00:00:55
Sé calcular su área, sé calcular su perímetro, etc. 00:00:59
Cuando hablo de un triángulo, sé todo. 00:01:02
Cuando hablo de un trapecio, sé todo, sé mis fórmulas. 00:01:06
Si no las sé, las busco. 00:01:10
Pero si yo hablo de una figura geométrica, no sé nada. 00:01:12
Una figura geométrica en general, hasta si te digo que tiene cuatro lados, 00:01:17
tú no puedes calcular ni su perímetro ni su área hasta que yo te haya definido qué figura 00:01:21
geométrica es se entiende yo te digo un cuadro tiene cuatro lados que es un cuadrado la calcula 00:01:30
es una forma si es un rectángulo de forma si es un trapecio puede ser natural de transformó 00:01:40
Entonces, podrías tú encontrar la forma más general, o sea, al final un cuadrado es un rectángulo. 00:01:45
Es un rectángulo especial con todos los lados iguales. 00:01:55
Si tú aplicas las fórmulas de rectángulos al cuadrado funciona. 00:02:00
La fórmula de cuadrado de rectángulo no, porque el cuadrado es un rectángulo, el rectángulo no es un cuadrado. 00:02:04
Entonces, en nuestra jerarquía yo podría hacer que cuadrado herede de rectángulo. 00:02:10
Sí, pero bueno, independientemente de todas estas cosas. 00:02:15
Puede ser, cuando yo estoy tratando de figura geométrica, no puedo hacer nada. 00:02:22
Hasta que tú no hayas dicho, oye, mira, esta figura geométrica es un cuadrado o es un triángulo, 00:02:28
se queda allí, se queda como, vale, muy bien. 00:02:34
Ahora, por como lo hemos hecho hasta ahora, yo puedo crear un objeto figura geométrica. 00:02:37
Yo puedo hacer un new figura geométrica. 00:02:43
Pero luego, ¿para qué me sirve? 00:02:45
Porque si yo tengo figuras geométricas, tengo una figura geométrica, 00:02:49
¿puedo calcular su área? 00:02:53
No, porque una figura geométrica no tiene área, ¿correcto? 00:02:57
Incorrecto, todas las figuras geométricas tienen área. 00:03:04
El problema es que se calcula de forma distinta, ¿me entendéis en esto? 00:03:09
O sea, yo sé que, en general, todas las figuras geométricas tendrán un número de lados, tendrán un área y tendrán un perímetro. 00:03:14
Lo sé. 00:03:28
Pero luego, dependiendo del tipo de figura, se calcula de una forma o de otra. 00:03:30
Queda claro esto. 00:03:35
Entonces, a mí lo que me gustaría es decir, vale, muy bien, 00:03:36
hagamos algo en común 00:03:40
generalizamos las figuras geométricas 00:03:44
pillo el cuadrado, pillo el rectángulo 00:03:47
pillo el 00:03:49
pentágono 00:03:50
y digo, vale, todos estos de aquí tienen 00:03:52
algo en común 00:03:55
por ejemplo, perímetro y área 00:03:55
o sea, se puede calcular su perímetro 00:03:59
se puede calcular su área 00:04:01
pero 00:04:02
es específico de cada figura 00:04:04
como se hace 00:04:07
vale, fenomenal 00:04:08
No puedo yo crear una jerarquía de herencia en el que por arriba pongo esta figura geométrica y ya allí digo, oye, mira, cualquier figura geométrica que herede de mí va a tener la posibilidad de calcular el área y calcular el perímetro, pero sin definir cómo se hace. 00:04:09
yo quiero crear una figura geométrica 00:04:33
que no sea un objeto 00:04:39
que luego tú puedas crear una forma geométrica 00:04:41
porque una forma geométrica no me interesa 00:04:43
a mí me interesa el cuadrado, el triángulo y cosas por el estilo 00:04:44
pero en vez de repetir 00:04:46
en cada una de las formas 00:04:48
reales, de las formas concretas 00:04:50
parte de código 00:04:52
o cosas que deberían estar 00:04:54
en todas las formas geométricas 00:04:56
yo quiero definir 00:04:58
un esquema general 00:05:00
no implementable 00:05:02
que tendré como punto más alto de mi jerarquía, digamos así. 00:05:04
Y luego, a partir de este esquema general, formaré los esquemas concretos. 00:05:14
Cuadrado, triángulo, etc. 00:05:20
Constantemente quiero crear una clase que no sea concreta, 00:05:22
que no sea instanciable, 00:05:26
a que sea una clase abstracta. 00:05:29
¿Vale? 00:05:33
Una clase abstracta es una clase que puede definir lo que se llaman métodos abstractos. 00:05:35
Un método abstracto es un método que tú me dices, este método existe, pero no te lo implemento. 00:05:43
No hay una implementación. 00:05:51
No hay el código que define cómo se hace. 00:05:53
Yo te estoy diciendo que está el método calcular área, pero no te digo cómo se calcula el área, 00:05:55
porque no te lo puedo decir de una figura geométrica. 00:06:01
Cuando tú crearás un triángulo que extiende figura geométrica, 00:06:04
el triángulo tendrá que implementar el método abstracto. 00:06:10
El método abstracto calcularia, que tú has metido que todas las figuras geométricas tienen calcularia, 00:06:15
pero tú lo implementarás en una subclase, no en la clase abstracta. 00:06:21
¿Entiendes? 00:06:28
Pero a veces hay una clase que define un concepto genérico con unas características y métodos 00:06:30
que no se pueden concretar directamente. 00:06:34
Por ejemplo, una figura geométrica 00:06:36
tiene sentido que tenga un método 00:06:38
para calcular su perímetro y su área, 00:06:40
pero cómo se calculan estos 00:06:42
depende de la figura geométrica concreta. 00:06:45
O, por ejemplo, un vehículo 00:06:46
tendrá la capacidad de moverse, 00:06:48
pero cómo lo hace depende del vehículo concreto. 00:06:50
Cuando yo uso el moverse sobre un barco, 00:06:53
hará una cosa distinta que moverse sobre un avión, 00:06:56
que moverse sobre un tren, 00:06:59
que moverse sobre un coche. 00:07:00
Pero todo se puede mover. 00:07:02
¿Se entiende? Entonces, este moverse, este cálculo área, este cálculo perímetro, serán métodos abstractos. 00:07:04
Métodos que todos los que deriven de esta clase, todos los que estendan esta clase, 00:07:13
todos los que sean subclase de esta clase, van a tener que implementar, porque es normal que los tengan. 00:07:20
Pero como depende de la subclase concreta, yo ahora te digo solo que existe, pero no te digo cómo sea. 00:07:25
me lo dirás 00:07:32
si yo uso una clase abstracta 00:07:33
puedo dejar este método 00:07:36
abstracto, sin implementación 00:07:37
sin cuerpo 00:07:40
¿vale? 00:07:41
cuando tú extenderás mi clase 00:07:43
heredarás este método 00:07:45
pero lo heredarás sin cuerpo 00:07:47
y tendrás que 00:07:49
¿y cómo se llama 00:07:51
cuando yo hago el cuerpo de un método 00:07:58
que estaba en mi superclase? 00:07:59
sobrescribirlo 00:08:02
override 00:08:03
¿entiendes? 00:08:04
es como si fuera un pseudo 00:08:07
contrato en el que 00:08:09
yo te digo, mira, todas las clases 00:08:11
que van a heredar de mí 00:08:13
tienen necesariamente que tener esto, esto y esto 00:08:14
lo van a tener 00:08:17
si no lo 00:08:18
implementan, pues 00:08:21
daré un error 00:08:23
lo que puedo hacer es que tenga una clase abstracta 00:08:23
y que tenga otro nivel de abstracción 00:08:27
o sea, una clase, una subclase 00:08:29
que también sea abstracta 00:08:31
Entonces no tiene que implementar los métodos abstractos. 00:08:33
Mientras que la clase abstracta puede contener dentro método abstracto. 00:08:38
Pero una clase abstracta no se puede implementar. 00:08:41
No puede hacer una new de una clase abstracta. 00:08:45
Una clase abstracta puede declarar, además de métodos normales, también métodos abstractos. 00:08:49
Porque a lo mejor algunas cosas sí que la puede implementar. 00:08:57
Si yo tengo el método de cuenta lados y toda la figura geométrica tiene lados, pues lo puedo implementar directamente en figura geométrica. 00:09:01
No todos los métodos de figura geométrica que se trata tienen que ser abstractos. 00:09:10
Pero con que una clase tenga al menos un método abstracto, pues esa clase es abstracta. 00:09:15
Métodos abstractos. 00:09:30
Un método abstracto es aquel que no tiene más que la definición del mismo sin su implementación. 00:09:31
Es decir, que no tiene la parte de las llaves. 00:09:38
Y se declara así. 00:09:42
Public abstract int método abstracto, sus parámetros. 00:09:44
Y aquí en vez de abrir llave y poner el código, pongo directamente punto y coma. 00:09:50
Esta es la declaración de un método abstracto. 00:09:56
¿Cuál es el cuerpo? ¿Qué hace? No lo sé. 00:09:58
¿Y cuándo lo sabré? 00:10:00
Cuando una clase que extenda esa clase implemente este método sobre escribiendo. 00:10:02
Sí, figura geométrica tendrá public abstract, double, calcular área, abierta paréntesis, cerrada paréntesis, punto y coma. 00:10:08
¿Cómo se calcula el área? No lo sé, pero de una figura geométrica puedo crear un área. 00:10:23
Cuando extenderé figura geométrica creando cuadrado, cuadrado extends figura geométrica, 00:10:30
cuadrado será obligado a sobreescribir el método calcular área. 00:10:36
Y lo hará usando su fórmula para calcular el área. 00:10:42
Ahora luego esto lo hacemos prácticamente. 00:10:46
A ver, retomamos el ejercicio del viernes y lo volvemos a hacer con clase abstracta. 00:10:50
Un método abstracto debe ser obligatoriamente redefinido en las subclases, no abstractas. 00:10:57
Si la subclase es abstracta, lo puede dejar sin definir. 00:11:04
permiten declarar en la superclase 00:11:07
un comportamiento que deberán 00:11:12
complementar todas las subclases 00:11:14
pero sin decir nada 00:11:16
sobre su implementación 00:11:18
yo te estoy diciendo, todas mis subclases 00:11:19
tienen que tener calcular área 00:11:21
pero cómo se hará, pues no lo sé 00:11:23
lo sabrá la subclase 00:11:26
¿dudas? 00:11:27
¿preguntas? 00:11:30
vale, entonces aquí por ejemplo 00:11:36
tengo una superclase, cuando esas tratas 00:11:38
se le pone en cursiva. Una superclase que tiene dentro un método que es real y otro método, 00:11:40
veis que está en cursiva, que es un método abstracto. El método 2 es abstracto. Cuando 00:11:47
yo tengo la subclase que hereda de esta superclase, hereda el método 1 con ya su implementación, 00:11:53
que si quiere puede sobreescribir o si quiere puede no sobreescribir. Lo ha heredado y luego 00:11:59
tiene el método 2 que ha heredado el prototipo ha heredado el hecho que tiene que existir pero le 00:12:05
falta el método para que esta clase no sea abstracta tiene necesariamente que implementar 00:12:12
el método 2 si no lo implementa pues no funciona da un error entonces tengo dos opciones o pongo 00:12:20
que esta subclase también es abstracta y entonces puede dejar el método 2 abstracto pero no puede 00:12:29
hacer una new ni de superclase ni de subclase porque son abstractas las dos. O la otra opción 00:12:36
es que en subclase no la pongo abstracta y entonces tengo que implementar todos los 00:12:41
métodos abstractos que he regalado. Además que pueda sobreescribir los otros métodos si quiere. 00:12:46
dudas 00:12:52
una clase abstracta no se puede 00:12:54
instanciar clases abstractas 00:12:58
no puedo hacer una new 00:13:01
de una clase abstracta, me va a dar 00:13:03
error 00:13:05
se puede instanciar 00:13:05
clases heredadas siempre que no sean 00:13:09
abstractas a su vez, vale 00:13:11
entonces si yo tengo una clase abstracta 00:13:12
ahí tengo otra clase que hereda esta clase abstracta 00:13:15
y esta otra clase que hereda la subclase 00:13:17
no es abstracta 00:13:19
pues puedo hacer una new de la subclase 00:13:21
Pero no, no, ni de la superclase. 00:13:23
Se pueden instanciar subclases utilizando la referencia a la clase padre. 00:13:26
Por ejemplo, si tengo esta situación de aquí, ¿vale? 00:13:30
Clase figura donde tengo un método abstracto que es dibuja para dibujar esta figura. 00:13:33
Luego tengo la clase rectángulo que extiende figura y que implementa con su código dibuja. 00:13:38
Y la clase círculo que extiende figura y que implementa también la figura. 00:13:43
Yo puedo crear figura f es igual a niu rectángulo. 00:13:47
¿Por qué? 00:13:50
¿Por qué puedo crear figura f es igual a newRectangulo? 00:13:51
¡Exacto! 00:14:11
Porque la relación de herencia es una relación de esin 00:14:11
Y un rectángulo es una figura 00:14:16
Por lo tanto, cuando creo un rectángulo 00:14:18
Lo puedo guardar tranquilamente en una referencia de tipo figura 00:14:21
Porque todo lo que puede hacer una figura lo puede hacer un rectángulo 00:14:27
Al revés, no 00:14:29
No puede hacer rectángulo r es igual a newFigura 00:14:31
Por dos razones 00:14:34
Razón número uno 00:14:36
Primero porque una figura no es un rectángulo 00:14:37
Y segundo 00:14:47
Segunda razón de por qué no puede hacer rectángulo R es igual a new figura 00:14:48
Está escrito en negrita 00:14:54
¡Muy bien! 00:14:58
¿Cómo te has salido? 00:15:02
Yo creo que te he perdido 00:15:04
Enhorabuena 00:15:06
Vale, hasta aquí hemos entendido esto 00:15:08
esto se puede aplicar a cualquier cosa 00:15:11
yo puedo hacer personas 00:15:16
¿se acuerdan? hay personas 00:15:18
que le daban alumnos 00:15:19
y profesores 00:15:22
en una clase, en un instituto 00:15:23
a mí me interesan alumnos 00:15:26
y profesores, no me interesan 00:15:28
personas 00:15:30
la persona me interesa 00:15:31
como molde para definir 00:15:34
toda la estructura de una persona 00:15:36
que comparten alumnos 00:15:38
y profesores, pero luego cuando 00:15:40
lo uso en la escuela, yo quiero por un lado 00:15:42
alumnos y por un lado profesores. Es 00:15:44
decir, que difícilmente 00:15:46
yo crearé una persona 00:15:48
como objeto. Yo o creo 00:15:50
alumnos o creo profesores. 00:15:52
¿Entendéis? 00:15:55
Entonces, persona sería 00:15:56
abstracto. 00:15:58
De esta 00:16:03
forma no puedo crear una persona. 00:16:04
Y luego 00:16:07
herede. 00:16:08
¿Sí? 00:16:11
Bueno. 00:16:12
Dicho esto, viene otro concepto interesante que hemos usado en un ejercicio 2. 00:16:14
Hemos hecho esto en lo del viernes que me preguntabas tú, Dennis. 00:16:22
¿Qué es el concepto del polimorfismo? 00:16:27
¿Qué es el polimorfismo? 00:16:29
Dos métodos se definen como polimórficos, o sea, tienen polimorfismo, 00:16:31
Si con el mismo nombre hacen funciones distintas, aunque similares, en objetos distintos. 00:16:36
Es decir, si yo tengo la clase triangular y la clase cuadrada, 00:16:50
y los dos tienen el método calcular área, 00:16:58
calcular área hace lo mismo. 00:17:03
¿Qué hace calcular área? 00:17:04
Calcular área. 00:17:06
Calcular área. 00:17:08
La función es la misma, ¿vale? Tiene el mismo nombre, pero ¿cómo lo hacen? Es distinto. 00:17:08
El triángulo lo calculará como base por alteza dividido por 2, el cuadrado lo calculará como base por alteza, o sea, lado por lado, o lado por lado. 00:17:16
O sea, hacen lo mismo, calcular el área, en funciones parecidas, son similares porque están haciendo lo mismo, 00:17:26
pero son distintos si yo llamo calcular es un triángulo o calcular es un cuadrado. 00:17:34
¿Vale? Entonces este método se dice polimórfico, porque se adapta, adapta su forma, tiene varias 00:17:41
formas dependiendo de si lo llamo sobre un triángulo o sobre un cuadrado, sobre un coche 00:17:49
o sobre un barco, sobre un alumno o sobre un profesor. ¿Entiende? No es el mismo método, 00:17:54
Son dos métodos parecidos con el mismo nombre que hacen la misma funcionalidad de forma distinta en objetos distintos. 00:18:02
Normalmente esto deriva del hecho que yo tenía una clase superclase, he heredado de esta superclase y he especializado el método que estaba en la superclase en mis subclases. 00:18:15
Yo tenía calculadores de figuras 00:18:30
Ahora lo he pasado en triángulos 00:18:33
Y lo he especificado para triángulos 00:18:35
Lo he pasado a cuadrados y lo he especificado para cuadrados 00:18:36
Y ahora tengo dos métodos que hacen lo mismo 00:18:39
Pero que hacen cosas 00:18:41
Que como lo hacen es distinto 00:18:43
Dependiendo del objeto sobre el que lo llevo 00:18:45
¿Se entiende el polimorfismo? 00:18:48
O concepto 00:18:54
Por ejemplo, el polimorfismo es el método 00:18:55
Calcular el rectángulo del círculo 00:18:57
Polimorfismo 00:18:59
Otro método de polimorfismo sería el método moverse de coche, o sea, vehículo, coche, bar. 00:19:01
Otro método de polimorfismo es el método saludar de persona, alumno, profesor. 00:19:09
Porque el alumno dice, hola, soy el alumno Stefano, 00:19:15
y el profesor dice, hola, soy el profesor Kier. 00:19:19
¿Entiendes? 00:19:23
Hacen lo mismo, saludan. 00:19:25
Pero uno diciendo que es un alumno y diciendo que es su nombre, 00:19:27
y otro en vez dice que es un profesor y pone su apellido. 00:19:31
Por último, si hablamos de clases, 00:19:40
el polimorfismo es lo que nos permite crear una clase con la referencia padre 00:19:42
pero que apunta a una clase hija, ¿vale? 00:19:47
Como hemos visto anteriormente. 00:19:50
O sea, cuando decimos que figura F es igual a un rectángulo, 00:19:51
estamos usando una forma de polimorfismo 00:19:56
Porque estamos, sustancialmente, utilizando un puntero, un tipo de variable de tipo superclase, 00:19:58
metiendo dentro un objeto de tipo subclase. 00:20:09
Se puede hacer porque cualquier subclase antes crea un objeto para la superclase. 00:20:14
Cualquier subclase es una superclase, entonces cualquier cosa que haga una superclase, 00:20:19
la puede hacer una subclase. 00:20:24
A lo mejor de forma distinta, pero lo puede hacer. Cuando se usa un método sobre un objeto, 00:20:25
se usará el de la clase de la que ese objeto es instancia. ¿Vale? Esto lo hemos visto. Es decir, 00:20:35
que cuando yo llamo, yo tengo una cadena de herencia. Tengo, no sé, vehículo, luego tengo 00:20:43
coche y luego tengo coche fantástico, que heredan una de otra. Y tengo moverse. El vehículo tiene 00:20:51
moverse, el coche tiene moverse y el coche fantástico tiene también moverse. ¿De acuerdo? 00:20:59
Cuando yo llamo moverse sobre un objeto se puede usar el de vehículo, el de coche o el de coche 00:21:05
fantástico. El que se elige depende de la instancia, no de la referencia. 00:21:14
Si yo tengo esta cosa aquí, figura f es igual a un rectángulo, y ahora llamo 00:21:23
f.calcularia, ¿dónde voy a mirar la implementación de este método? 00:21:28
¿Qué se usa? ¿Cuál método se usa? ¿El de figura o el de rectángulo? 00:21:37
Es de la clase rectángulo porque la instancia es rectángulo. 00:21:44
¿Está claro? 00:21:50
Podemos usar una superclase como parámetro formal 00:21:54
y luego usar el método apropiado basándose sobre el objeto pasado como parámetro actual. 00:21:57
Yo parámetro formal de un método puedo decir 00:22:05
método haz algo que me pasas una figura. 00:22:07
y dentro 00:22:14
este método haz algo, calcula su área 00:22:17
para hacer no sé qué 00:22:19
ahora, si tú 00:22:21
cuando usas este método haz algo 00:22:23
que pilla una figura, me pasas un 00:22:25
rectángulo, yo usaré 00:22:27
la calcularía del rectángulo 00:22:29
cuando tú 00:22:32
si tú me pasas un triángulo, usaré la calcularía 00:22:33
del triángulo, si tú me pasas un 00:22:36
círculo, usaré la calcularía del círculo 00:22:38
pero dentro 00:22:40
en el código estoy usando figura 00:22:41
y estoy usando este. Cuando tenemos que crear un objeto de una clase heredada podemos utilizar 00:22:43
como clase referencial a la del padre o la del hijo. Tenemos una clase padre y una clase hijo. 00:22:54
Puedo usar padre object es igual a new hijo. Funciona. Padre object es igual a new padre. 00:22:59
Siempre y solo padre tiene que ser no astra. Si padre es una clase astral esto no lo puedo hacer. 00:23:07
Pero si padre, como hemos hecho hasta ahora, es una clase no abstracta, puede hacer esto. 00:23:15
E hijo object es igual a new object, new hijo. Estas tres cosas se pueden hacer, ¿vale? 00:23:21
Lo que no puede hacer es, hijo object es igual a new padre, porque el hijo, 00:23:29
el padre no es un hijo 00:23:37
el hijo es un padre 00:23:39
¿sí? 00:23:41
dicho así 00:23:44
no tiene sentido, pero me entiendo 00:23:44
vale 00:23:46
hay tres formas posibles de estanciarla 00:23:48
¿vale? hijo barra h 00:23:51
guardaño hijo barraño hijo 00:23:52
¿vale? lo que estamos diciendo ahora 00:23:54
podremos acceder a todos los métodos de atributo del hijo 00:23:56
y del padre ¿vale? 00:23:59
si hay métodos sobrescritos solo accederemos a los del hijo 00:24:00
queda claro esta cosa aquí 00:24:03
si yo tengo una 00:24:05
variable de tipo hijo 00:24:07
y un objeto de tipo hijo 00:24:10
puedo acceder a todos los métodos del hijo 00:24:11
puedo acceder a todos los métodos del padre 00:24:13
porque los tengo heredados 00:24:15
pero si tengo un método sobrescrito 00:24:17
no puedo acceder al del padre 00:24:20
solo puedo acceder al del hijo 00:24:22
si yo tengo un coche fantástico 00:24:23
que heredaba de coche 00:24:31
cuando uso el método sobre el coche fantástico 00:24:32
no puedo usar el método 00:24:37
moverse del coche. 00:24:39
Siempre se usará el método 00:24:40
moverse del coche fantástico. 00:24:42
¿Sí? 00:24:47
Si yo tengo 00:24:49
padre, padre, padre, 00:24:50
bueno, el padre puede acceder 00:24:51
solo a los métodos y atributos 00:24:53
del padre. No hay un hijo aquí 00:24:55
porque no se ha creado el hijo. 00:24:57
¿Sí? 00:25:01
Entonces es imposible acceder a los 00:25:01
del hijo. No existen ni sus 00:25:03
atributos ni sus métodos 00:25:05
Porque he creado un coche, no un coche fantástico. 00:25:07
Entonces tengo un coche, no le puedo hacer dar al botón esto que salta. 00:25:10
¿De qué estoy hablando? ¿O estoy víctima de la nostalgia? 00:25:14
¿No habéis visto nunca el coche fantástico? 00:25:19
Pues los coches normales no saltan. El coche fantástico sí, y habla también. 00:25:23
Y luego existe una cosa llamada upcasting, ¿vale? 00:25:29
Es cuando digo, el padre es un hijo. 00:25:33
O sea, tengo una referencia padre con dentro un objeto hijo. 00:25:39
¿Se puede hacer? Sí, porque la subclase es una superclase. 00:25:44
Porque se puede hacer. 00:25:50
Podemos acceder, pero solo a los métodos atributos del padre. 00:25:52
Porque cuando uso la referencia, él creerá que es un padre. 00:25:55
Entonces, no ve los métodos alternativos de hijo. 00:25:58
Si un método del padre está sobrescrito, ¿cuál se usa? El del hijo. Porque cuál se usa no depende de la referencia, sino depende de la cosa, del estado. Y ahora hacemos todas pruebas de esto. 00:26:03
solo podemos acceder a los delijos 00:26:21
si hacemos un downcasting 00:26:24
explícito, esto es un upcasting 00:26:26
estoy casteando hacia arriba 00:26:28
en la jerarquía 00:26:30
herencia 00:26:33
y yo puedo hacer un downcasting 00:26:35
explícito, o sea, castear hacia abajo 00:26:38
¿vale? siempre y cuando 00:26:40
lo pueda hacer porque si no explota 00:26:42
el downcasting 00:26:43
consiste en poner la referencia que 00:26:45
queramos bajar hacia la clase heredada 00:26:48
Por ejemplo, esto. ¿Os acordáis que aquí yo había creado var h que es un hijo, pero que es de tipo padre? Pues ahora haciendo esto le estoy diciendo, mira, tú eres de tipo hijo. Trátame esta referencia, este objeto, como si fuera un hijo. Que lo puede hacer porque en realidad dentro de esta referencia de tipo padre hay un hijo. 00:26:50
¿Vale? Si cuando lo hago 00:27:09
no es verdad que esta 00:27:11
bar h no apuntaba aquí, 00:27:13
por ejemplo, si intento hacer hijo de 00:27:15
bar p, pues me va 00:27:17
a saltar una class cast exception. 00:27:19
Estás intentando hacer un 00:27:22
casting a una clase que 00:27:23
no puedes hacer, porque 00:27:25
no eres de ese tipo de clase. 00:27:27
No, yo soy un vehículo que va a hacer 00:27:30
un downcasting a un coche. 00:27:31
No, tú eres un vehículo, no eres un coche. 00:27:33
Y aquí empezarían interfaz, 00:27:40
que hoy no va a pedir. 00:27:42
Interfaces son clases abstractas donde no hay métodos concretos. 00:27:44
Solo métodos abstractos. 00:27:48
¿Vale? 00:27:51
Pero mañana o pasado. 00:27:51
¿Sí? 00:27:58
¿Dudas hasta aquí? 00:27:58
Materias:
Programación
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado superior
      • Primer Curso
Autor/es:
Stefano Chiesa
Subido por:
Stefano C.
Licencia:
Reconocimiento - No comercial
Visualizaciones:
20
Fecha:
19 de enero de 2026 - 11:52
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
28′ 06″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
235.73 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid