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 7 de febrero de 2024 por Stefano C.

10 visualizaciones

Descargar la transcripción

Voy a grabar esta clase, por lo tanto, si habláis me dais el permiso de grabaros, ¿vale? 00:00:00
Y os invito a hablar y preguntar, ¿vale? 00:00:06
Entonces, una vez vista herencia y cómo funcionan los objetos, 00:00:09
hemos empezado en la clase anterior, en el ejercicio anterior, 00:00:15
hemos visto algunos ejemplos de cómo funciona la clase y las herencias 00:00:19
y han salido algunos temas, como por ejemplo las clases abstractas 00:00:24
y aún si no lo sabéis, el polimorfismo, ¿vale? 00:00:29
Entonces, vamos a darle un poquito más de concepto. 00:00:32
La clase abstracta la hemos visto, la hemos hecho un ejemplo ahora y más o menos ha entendido, ¿vale? 00:00:36
Es que hay veces en que una clase está definiendo un concepto, como siempre hacemos, 00:00:42
pero es un concepto muy genérico, un concepto que no se puede instanciar como tal, ¿vale? 00:00:46
Es tan genérico lo que estamos modelizando que no tiene sentido tener un objeto de ese tipo, ¿vale? 00:00:52
Es una cosa más bien abstracta, ¿vale? 00:00:59
Ejemplos de esto pueden ser una figura geométrica, que es el ejemplo que hemos hecho nosotros, 00:01:02
una figura geométrica por sí misma puede hacer muchas cosas. 00:01:06
Yo puedo calcular el área adecuada de las figuras geométricas, 00:01:09
puedo calcular el perímetro de las figuras geométricas, 00:01:12
pero no sé cómo hasta que no especifico qué tipo de figura geométrica es, ¿sí? 00:01:14
Lo mismo puede ser un vehículo. 00:01:21
El vehículo puede tener la capacidad de moverse, la velocidad con que se mueve, 00:01:23
muchas características. 00:01:28
Hay muchas funcionalidades, pero hasta que no especifico qué vehículo concreto es, 00:01:29
tampoco puedo saber mucho, sí, sí, su velocidad, su tipo de movimiento, 00:01:36
qué puede juntar, qué ciudades o qué sí, ¿vale? 00:01:41
Entonces, la idea es, hay una forma de hacer una clase abstracta, 00:01:46
que sustancialmente es una mezcla entre cosas implementadas, 00:01:53
¿vale? 00:01:57
¿Vale? 00:01:57
¿Vale? 00:01:57
¿Vale? 00:01:57
¿Vale? 00:01:58
¿Vale? 00:01:58
¿Vale? 00:01:58
¿Vale? 00:01:58
¿Vale? 00:01:58
¿Vale? 00:01:58
¿Vale? 00:01:58
¿Vale? 00:01:58
¿Vale? 00:01:58
¿Vale? 00:01:58
¿Vale? 00:01:58
¿Vale? 00:01:58
¿Vale? 00:01:59
¿Vale? 00:01:59
¿Vale? 00:01:59
¿Vale? 00:01:59
¿Vale? 00:02:00
¿Vale? 00:02:00
¿Vale? 00:02:00
¿Vale? 00:02:00
Atributos, o sea, datos implementados y métodos implementados, 00:02:02
y algunos métodos que en vez de, tú dices, mira, en este concepto, 00:02:07
tiene sentido que esté este método, 00:02:12
tiene sentido implementar esta funcionalidad, 00:02:14
pero no a este nivel de extracción. 00:02:17
A este nivel de extracción es todavía demasiado abstracto 00:02:20
para saber cómo se hace. 00:02:23
Por lo tanto, lo pongo allí, 00:02:25
Como si fuera un 00:02:28
Un contrato 00:02:30
Que ponga allí, oye mira 00:02:31
Aquí tiene que haber el calcular la área 00:02:34
De las figuras geométricas 00:02:36
Pero no lo voy a implementar yo 00:02:37
Lo voy a dejar allí para que cualquier 00:02:40
Clase 00:02:43
Que en un futuro me extienda a mi 00:02:45
Sea obligada 00:02:46
A implementar este método 00:02:48
Si no esas trata ella también 00:02:50
¿Si? 00:02:52
Cuidado que 00:02:55
Yo podría hacer una clase 00:02:56
Extracta que implementa 00:02:58
Algunos de los métodos 00:03:01
Extractos de las superclases 00:03:03
Y deje abstractos 00:03:04
Otros y cree otros 00:03:07
Más abstractos 00:03:08
No es que necesariamente si es abstracta no implementa nada 00:03:10
Puede haber una implementación 00:03:12
De una parte 00:03:15
Pero no de todos 00:03:16
Siempre que aparezca al menos un método abstracto 00:03:17
Pues la clase tiene que ser abstracta 00:03:21
Si la clase no es abstracta 00:03:23
Tengo que implementar todos los métodos 00:03:24
¿Si? 00:03:27
Entonces ¿Cómo se define 00:03:29
Un método abstracto? 00:03:31
Pues poniendo la palabra reservada abstract 00:03:32
Después de public 00:03:35
¿Vale? Esto me está diciendo 00:03:36
Oye mira, este método tiene que existir 00:03:38
Pero como no tengo 00:03:41
La capacidad actual de 00:03:43
Hacer una implementación concreta 00:03:44
Porque los datos siguen siendo 00:03:47
Demasiados abstractos 00:03:49
Para poder hacer 00:03:51
Para poder hacer una implementación real 00:03:52
¿Si? 00:03:54
Pues te lo pongo aquí 00:03:54
Sin el cuerpo 00:03:56
Esto es como si estoy definiendo 00:03:59
El prototipo del método 00:04:01
¿Vale? 00:04:03
Esto es el prototipo del método 00:04:04
Sin poner el cuerpo del método 00:04:06
Falta la implementación 00:04:08
¿Quién tendrá que hacer la implementación? 00:04:10
Las clases que hereden de mi 00:04:12
Si no son abstractas 00:04:14
Las clases 00:04:17
No abstractas 00:04:19
Que hereden de mi 00:04:21
¿Si? ¿Se entiende? 00:04:22
Y fijaos que si yo 00:04:24
Heredo de una clase abstracta 00:04:27
Estoy obligado 00:04:30
A implementarlo 00:04:31
Si yo no quiero ser abstracto 00:04:32
¿Se entiende o no? 00:04:34
¿Dudas? 00:04:38
Este es un mecanismo para 00:04:39
Modelizar conceptos más complejos 00:04:41
¿Vale? Y es siempre 00:04:43
Acordaos porque la idea viene un poco por allí 00:04:45
Para organizar 00:04:47
Y reutilizar 00:04:50
Lo máximo posible 00:04:51
El código que yo creo 00:04:53
¿Vale? Entonces 00:04:54
Dentro del vehículo 00:04:56
Habrá algunos métodos implementados 00:04:57
Y algunos datos que son propios 00:05:00
De todos los vehículos del mundo 00:05:03
Y eso es interesante 00:05:04
Porque cuando yo heredaré 00:05:06
De estos vehículos 00:05:08
Pues seguramente 00:05:09
Esas cosas implementadas 00:05:11
Ya las estoy heredando y las puedo utilizar 00:05:15
¿Vale? 00:05:17
La clase abstracta deriva del hecho que 00:05:18
Vale, pero cuando intento hacer estas generalizaciones 00:05:20
A veces 00:05:23
No puedo implementar todo 00:05:24
Entonces me dejo como 00:05:26
Trabajo futuro, hago un contrato 00:05:28
Diciendo a que cualquier persona 00:05:30
Que quiera implementar 00:05:32
Una clase que utilice lo que yo ya he creado 00:05:34
Pues necesariamente 00:05:37
Tendrá que implementar 00:05:38
Una cosa concreta 00:05:40
De mis métodos abstractos 00:05:42
Una implementación concreta 00:05:45
De mis métodos abstractos 00:05:46
¿Se entiende? 00:05:48
¿Dudas? 00:05:50
¿Se entiende? 00:05:54
¿Se entiende? 00:05:56
¿Se entiende? 00:05:56
¿Se entiende? 00:05:57
¿Se entiende? 00:05:57
¿Se entiende? 00:05:57
Sustancialmente, formalmente 00:05:57
Permiten declarar en la superclase 00:05:58
Un comportamiento, un método, unas funciones 00:06:01
¿Vale? 00:06:04
Que deberán cumplimentar 00:06:04
Todas las subclases 00:06:06
Pero sin decir nada sobre su implementación 00:06:07
Esto lo tendrás que hacer 00:06:10
Pero no te digo cómo 00:06:12
Todas las figuras geométricas 00:06:13
Tendrán que ser capaces de calcular 00:06:16
Su área 00:06:18
Pero no te digo cómo 00:06:19
El círculo la calculará de una forma 00:06:21
El cuadrado de otra forma 00:06:23
El triángulo de otra forma 00:06:24
Todos serán capaces de calcular su perímetro 00:06:25
Pero no sé cómo se calcula cada uno con su fondo 00:06:28
¿Sí? 00:06:31
¿UML? 00:06:36
¿Habéis visto algo de UML? 00:06:37
Lo veréis, espera 00:06:39
¿Vale? 00:06:41
En UML que son como gráficos y diagramas 00:06:42
Que permiten 00:06:45
Definir un sistema 00:06:46
Y cómo interaccionan las clases 00:06:49
Entre ellas 00:06:51
Pues hay un diagrama 00:06:52
Que es el diagrama de clases 00:06:53
Donde se definen las clases 00:06:54
Que son parecidas a estas 00:06:56
Cajitas así 00:06:57
A veces lo hemos visto 00:06:58
En los ejercicios que he puesto 00:06:59
¿Vale? 00:07:00
El nombre 00:07:01
Aquí los atributos 00:07:02
Y aquí los métodos 00:07:03
¿Vale? 00:07:04
Formalmente si estás utilizando UML 00:07:05
Universal Modeling Language 00:07:07
Pues lo que van en cursiva 00:07:10
Nombres o métodos en cursiva 00:07:13
Son abstractos 00:07:16
¿Sí? 00:07:18
Entonces si yo puedo definirte 00:07:19
Una superclase así 00:07:21
Sé que esto lo tengo que implementar 00:07:22
Mientras este de aquí 00:07:23
Lo tengo que declarar como abstracto 00:07:24
Y se implementará 00:07:26
Cuando una clase herede de esta aquí 00:07:27
La herencia es una flecha 00:07:30
¿Sí? 00:07:31
Lo deberíais ver en algún momento 00:07:34
En entornos de desarrollo 00:07:36
¿Vale? 00:07:38
Particularidades de la clase abstracta 00:07:42
No se pueden instanciar 00:07:44
Si la clase abstracta 00:07:46
No puedo hacer 00:07:48
Figura X es igual a new figura 00:07:49
New figura 00:07:51
No puede existir 00:07:53
No se puede hacer un new 00:07:54
De una clase que sea abstracta 00:07:56
¿Por qué? 00:07:58
Porque le faltan cosas 00:07:59
¿Sí? 00:08:00
Yo puedo crear un objeto concreto 00:08:02
De una subclase que herede de allí 00:08:04
Que implemente todos los métodos 00:08:06
Pero no de esta abstracta 00:08:08
Porque luego si amarra 00:08:09
Uno de los métodos abstractos 00:08:11
No sé qué hacer 00:08:12
Porque no tengo la implementación 00:08:13
De ese método 00:08:16
Por lo tanto no se puede hacer 00:08:17
Ahora veremos qué se puede hacer 00:08:19
¿Vale? 00:08:21
¿Qué es? 00:08:22
¿Qué es? 00:08:22
Se pueden instanciar clases heredadas 00:08:23
Siempre que no sean abstractas a su vez 00:08:25
¿Sí? 00:08:27
Y se pueden instanciar subclases 00:08:28
Utilizando la referencia a clases padre 00:08:30
O sea figura F es igual a new rectángulo 00:08:33
Lo hemos hecho 00:08:36
Esto me vale 00:08:36
¿Sí? 00:08:38
F podrá utilizar los métodos abstractos 00:08:39
Por lo que sabemos ya 00:08:43
Que en realidad no se utilizarán 00:08:45
Los métodos de F 00:08:47
Sino que se utilizarán los métodos de rectángulo 00:08:49
Y como rectángulo 00:08:51
Al extenderme 00:08:53
Ha tenido que implementar 00:08:55
Los métodos abstractos 00:08:57
Pues ese método lo tiene 00:08:58
¿Me explico? 00:09:00
Repito 00:09:03
Si aquí la clase figura 00:09:04
Tiene el método abstracto dibuja 00:09:08
Yo sé que cualquier hijo de figura 00:09:09
Tendrá que implementar dibuja 00:09:12
Porque dibuja es abstracto 00:09:14
Entonces cuando hago rectángulo 00:09:16
Pues él tendrá que implementar eso 00:09:18
Si no da error 00:09:20
Entonces cuando hago una cosa como esta 00:09:20
De figura F es igual a new rectángulo 00:09:23
Yo sé que rectángulo al crearse 00:09:25
Tiene este método de aquí 00:09:29
Y no obstante yo lo use como figura 00:09:32
Entonces F dirá 00:09:34
¿Qué métodos tendrá? 00:09:36
Pues F tendrá el método dibuja 00:09:37
Pero por eso que es el polimorfismo 00:09:38
Que veremos dentro de un rato 00:09:42
Pero por esa funcionalidad 00:09:43
Que hemos visto en Java 00:09:45
Que siempre se utiliza el método 00:09:46
Más específico a la instancia 00:09:48
Java no va a usar 00:09:50
El dibujar 00:09:52
De figura 00:09:53
Que sería abstracto 00:09:53
Y no existiría 00:09:54
Va a utilizar el dibujar de rectángulo 00:09:55
Porque tú dentro de esta referencia figura 00:09:57
Tienes un objeto rectángulo 00:10:00
La instancia de rectángulo 00:10:02
Entonces usas el método más específico 00:10:03
La sobrescriptura más específica 00:10:06
Para ese método 00:10:08
O sea este 00:10:09
Que no es abstracto 00:10:10
Si también rectángulo fuera abstracto 00:10:13
No podrías hacer new rectángulo 00:10:17
¿Sí? 00:10:19
¿Qué es el método polimorfismo? 00:10:23
¿Vale? 00:10:28
El polimorfismo es el concepto 00:10:28
Que dos métodos son polimórficos 00:10:30
Si con el mismo nombre 00:10:32
Hacen funciones distintas 00:10:35
Aunque similares en objetos distintos 00:10:36
Es el concepto de 00:10:39
Yo tengo el método 00:10:40
Calcular área 00:10:41
Y este método hace cosas parecidas 00:10:44
Porque es calcular el área 00:10:47
Pero de forma distinta en objetos distintos 00:10:48
No es lo mismo 00:10:51
Calcular el área del cuadrado 00:10:53
Que calcular el área del triángulo 00:10:54
Que calcular el área de otra cosa 00:10:55
¿Vale? 00:10:57
Entonces cuando yo luego pillo un objeto 00:10:58
Y le digo calcula tu área 00:11:01
El polimorfismo es lo que me permite 00:11:03
Seleccionar el método 00:11:05
Más 00:11:07
Concreto para esa instancia 00:11:08
¿Sí? 00:11:12
Que va de la mano con las clases abstractas 00:11:13
Por esta razón de aquí 00:11:15
Figura 00:11:17
Me está diciendo que existe dibuja 00:11:19
¿Vale? 00:11:21
Luego yo tengo rectángulo 00:11:21
Con dibuja 00:11:23
Y círculo con dibuja 00:11:24
Y dependiendo de si la instancia 00:11:25
Que tengo 00:11:28
Que estoy trabajando 00:11:29
Es una instancia de rectángulo 00:11:30
O una instancia de círculo 00:11:32
Utilizaré este dibujo de aquí 00:11:34
Esta implementación de aquí 00:11:36
O esta implementación de aquí 00:11:37
Y eso lo hace de forma automática Java 00:11:39
Java va a pillar la referencia 00:11:41
¿Vale? 00:11:45
En este caso ignora el tipo de la referencia 00:11:46
Lo único que mira para el tipo de referencia 00:11:49
Es a ver qué método puede utilizarla 00:11:51
Utilizar 00:11:53
Es lo que hemos hecho antes con 00:11:54
Con triángulo ¿No? 00:11:56
Hemos visto que si yo pillaba la figura geométrica 00:11:58
Pues no me daba el método 00:12:00
Que solo existía en 00:12:02
En triángulo 00:12:04
¿Os acordáis? 00:12:05
Sin embargo 00:12:08
F sí que tiene dibuja 00:12:09
De forma abstracta 00:12:11
Pero por polimorfismo 00:12:12
Cuando se va a ejecutar 00:12:14
Este F.dibuja 00:12:16
Él elegirá 00:12:20
Cual es la forma de dibujar 00:12:22
El método digamos 00:12:23
Más apropiados 00:12:25
En base al tipo de la instancia 00:12:26
No al tipo de la referencia 00:12:30
¿Entendéis? 00:12:31
Vale 00:12:37
Un ejemplo de polimorfismo 00:12:37
Es el método calcular 00:12:38
De rectángulo de círculo 00:12:40
¿Vale? 00:12:41
Si hablamos de clases 00:12:42
Es lo que nos permite crear una clase 00:12:47
Con la referencia padre 00:12:49
¿Vale? 00:12:50
Pero que apunta a una clase hija 00:12:51
Esta cosa aquí 00:12:53
En un cierto sentido 00:12:54
Polimorfismo es muchas formas 00:12:55
Muchos aspectos 00:12:57
En un cierto sentido 00:12:59
Y lo que me permite hacer es 00:13:00
Intercambiar 00:13:03
O sea poner 00:13:04
Allá donde debería ir una figura 00:13:05
Otra cosa 00:13:07
Que pero es una figura 00:13:08
¿Vale? 00:13:10
Lo que me permite decir 00:13:11
Pongo una subclase 00:13:13
Dentro de una referencia superclase 00:13:15
Lo puedo hacer 00:13:18
Porque hay polimorfismo 00:13:19
Porque esta figura 00:13:20
En realidad es una versión más genérica 00:13:23
Más abstracta del rectángulo 00:13:28
Entonces un rectángulo es una figura 00:13:30
Y todo lo que puede hacer sobre una figura 00:13:33
Lo puede hacer sobre un rectángulo 00:13:35
El rectángulo puede hacer más cosas 00:13:36
¿Vale? 00:13:39
Pero estoy seguro que todo lo que hace figura 00:13:41
Lo hace un rectángulo 00:13:44
Porque el rectángulo es una figura 00:13:45
¿Si? 00:13:46
No va al revés 00:13:49
No puede hacer rectángulo R 00:13:50
Es igual a R 00:13:52
A ningún figura 00:13:53
Porque estaría diciendo que 00:13:53
Puede hacer métodos de rectángulo 00:13:56
Que pero en figura no existe 00:13:58
¿Me explico? 00:14:00
Hasta si figura no fuera abstracta 00:14:02
Cuando se usa un método sobre un objeto 00:14:04
Se usará el de la clase 00:14:08
La que objeto de instancia 00:14:10
¿Vale? 00:14:12
O sea lo que decíamos antes 00:14:13
No cuenta la referencia 00:14:14
Más cuenta la instancia que estoy trabajando 00:14:17
¿Si? 00:14:19
Y usaré el método más específico 00:14:20
Esa instancia 00:14:23
Si se ha sobrescrito en rectángulo 00:14:23
El método que estoy utilizando 00:14:26
Uso S 00:14:27
Si no se ha sobrescrito 00:14:27
Será el de figura 00:14:29
El que está definido en figura 00:14:30
Recordaros que la clase abstracta 00:14:31
Algunos métodos puede implementarlo 00:14:33
Seguramente 00:14:35
Si el método en figura es abstracto 00:14:37
En rectángulo he tenido que sobrescribirlo 00:14:40
Si no me daría error 00:14:44
Entonces usaré siempre el de rectángulo 00:14:45
Si pero el método en figura no es abstracto 00:14:48
Pues si no lo he sobrescrito 00:14:51
En rectángulo usaré el de figura 00:14:53
Si si lo he sobrescrito en rectángulo 00:14:55
Pues entonces usaré el de rectángulo 00:14:58
¿Dudas? 00:15:00
Vale 00:15:05
Podemos usar la superclase como parámetro formal 00:15:06
Y luego usar el método apropiado 00:15:10
Basándonos sobre el objeto pasado 00:15:12
Como parámetro actual 00:15:13
¿Vale? 00:15:14
Es decir 00:15:15
Puedo utilizar figura como parámetro formal 00:15:16
Una relación 00:15:19
Lo que viene a decir 00:15:20
Lo que acabamos de decir 00:15:22
Otra vez 00:15:23
¿Vale? 00:15:23
Sin embargo luego como parámetro actual 00:15:24
Cuando luego se va a utilizar eso 00:15:26
Pues lo que estáis mirando 00:15:28
Es el objeto propio 00:15:29
¿Sí? 00:15:31
Cuando tenemos que crear un objeto 00:15:33
En una clase de edad 00:15:35
Podemos utilizar como clase referenciada 00:15:36
La del padre o la del hijo 00:15:38
¿Vale? 00:15:39
Estas tres opciones de aquí 00:15:40
Que son las tres opciones 00:15:42
Que hemos probado antes 00:15:43
Con triángulo 00:15:44
Y figura geométrica 00:15:46
¿Vale? 00:15:48
En el vídeo anterior 00:15:49
O en 00:15:50
Esta mañana 00:15:50
Antes en la clase secundaria 00:15:51
Anteriores 00:15:53
Pues hemos hecho estas cosas aquí 00:15:53
Utilizando como padre 00:15:55
Figura geométrica 00:15:57
Y como hijo 00:15:58
Triángulo 00:15:59
Entonces 00:16:00
Puedo poner 00:16:00
Una instancia subclase 00:16:01
Dentro de una referencia 00:16:04
Superclase 00:16:05
Se puede hacer 00:16:07
Puedo poner 00:16:08
Una instancia superclase 00:16:09
Dentro de una referencia superclase 00:16:11
Siempre y cuando 00:16:13
La superclase 00:16:15
No sea abstracta 00:16:16
Si padre fuera abstract 00:16:18
Pues no puede hacer ni un padre 00:16:20
Pero por ejemplo nosotros 00:16:23
Cuando hemos empezado al principio 00:16:25
Y no hemos puesto que 00:16:27
Figura geométrica fuera abstracta 00:16:28
Si que lo hemos hecho 00:16:30
Os acordáis que luego 00:16:31
Lo he tenido que borrar del main 00:16:32
Y finalmente puedo poner 00:16:34
Una instancia hijo 00:16:37
Dentro de una referencia hijo 00:16:39
Todas estas tres cosas 00:16:40
Lo puedo hacer 00:16:41
Lo que no puedo hacer 00:16:42
Es la cuarta opción 00:16:43
O sea crear 00:16:45
Un padre 00:16:46
Y ponerlo en una instancia hijo 00:16:47
¿Vale? 00:16:49
Porque un padre no es un hijo 00:16:51
Un hijo es un padre 00:16:52
¿Sí? 00:16:53
¿Dudas? 00:16:55
Vale 00:16:59
Tres formas posibles de instanciarla 00:17:00
Que son las que hemos visto ahora 00:17:02
¿Vale? 00:17:04
Entonces 00:17:05
Esta de aquí es la más obvia 00:17:05
Tengo un hijo 00:17:08
La pongo en un variable hijo 00:17:09
¿Vale? 00:17:10
Puedo acceder a todos los métodos del hijo 00:17:10
A todos los métodos del padre 00:17:13
Y si hay métodos sobre escritos 00:17:16
Solo se accede a los del hijo 00:17:19
No del padre 00:17:21
Hasta si hago upcasting 00:17:23
O sea si casteo a la del padre 00:17:25
Lo vimos aquí en un ejemplo anterior 00:17:27
Pues sigo utilizando la del hijo 00:17:29
¿Sí? 00:17:31
Si hago esta de aquí 00:17:34
Puedo acceder a todos los métodos 00:17:36
Y atributos del padre 00:17:39
¿Vale? 00:17:40
Pero es imposible acceder a los del hijo 00:17:42
Porque esto no los tiene la parte del hijo 00:17:45
No tiene ni los métodos 00:17:47
Ni los atributos del hijo 00:17:48
¿Sí? 00:17:49
¿Vale? 00:17:50
Cuando tengo una cosa de este estilo en vez 00:17:50
¿Vale? 00:17:54
Hasta aquí es más claro 00:17:55
Porque creo un hijo y lo meto en un hijo 00:17:57
Creo un padre y lo meto en un padre 00:17:59
Cuando hago esto de crear un hijo 00:18:00
Y ponerlo en una instancia 00:18:03
De tipo del padre 00:18:05
De tipo de una superclase 00:18:06
Pues puedo acceder 00:18:08
A los métodos y atributos del padre 00:18:10
No del hijo 00:18:13
Es lo que veíamos antes 00:18:14
Cuando hicimos una instancia FG 00:18:16
Y hacemos FG 00:18:19
Y no aparecía el método del hijo 00:18:20
¿Sí? 00:18:23
Pero si hay un modo 00:18:25
Para acceder a las cosas del hijo 00:18:27
Que es hacer un downcasting 00:18:29
¿Vale? 00:18:31
Para poder acceder al del hijo 00:18:32
Tendré que decirle específicamente 00:18:35
Oye, trátame esta variable 00:18:37
Como si fuera de tipo hijo 00:18:39
Y ahora sí que me aparecerán 00:18:41
Los métodos 00:18:43
Y las funciones 00:18:44
Y los atributos del hijo 00:18:46
¿Sí? 00:18:49
Lo que viene a ser 00:18:50
El downcasting 00:18:52
¿Sí? 00:18:53
¿Cómo se hace el downcasting? 00:18:55
Así 00:18:56
Si var h es 00:18:56
De tipo padre 00:19:00
En el momento en que le digo 00:19:03
Hijo 00:19:06
Pues lo que estoy diciendo es 00:19:07
Trátame esto como hijo 00:19:08
Entonces si luego accedo 00:19:10
A ver que hay allí 00:19:12
Pues me saldrán las variables del hijo 00:19:15
Me saldrán los métodos del hijo 00:19:18
¿Dudas? 00:19:20
Cuidado que si intento hacer esto 00:19:24
Y no puedo hacerlo 00:19:26
Porque no se puede hacer la conversión 00:19:28
Porque el objeto real dentro de esta variable 00:19:30
No es lo que estoy casteando 00:19:32
Pues me salta una excepción 00:19:35
Un error que es la class cast exception 00:19:37
Class cast exception 00:19:38
¿Dudas? 00:19:40
Si una clase 00:19:48
Que solo tiene métodos abstractos es una cosa un poquito distinta y es una interfaz. Tiene que ser un contrato puro en el que yo digo, mira, yo no te implemento nada, pero si alguien quiere implementar mi interfaz, esto es lo que tiene que hacer. 00:19:49
Y todas las clases del mundo que implementen mi interfaz seguramente podrán hacer estas cosas, podrán tener estos métodos. Esto se usa mucho en términos de cuando hay un sistema muy grande y tengo que dividir el trabajo en varios grupos de trabajo, ¿vale? 00:20:12
Como no puedo yo hacer que un grupo dependa de lo que está desarrollando el otro, le digo, mira, el otro implementa... 00:20:35
El otro implementará esta interfaz. Es decir, que los objetos que están creando el otro grupo podrán hacer esto, esto, esto, esto con estos parámetros. 00:20:42
Ahora tú, en tu parte, en tu módulo, puedes hacer todas las llamadas a objetos de ese tipo con estos métodos porque ellos luego lo implementarán. 00:20:51
Ahora no están implementados, pero ellos sí que lo implementarán. Y te permite organizarse entre el grupo de trabajo. 00:21:02
Pero las interfaces... 00:21:10
Las interfaces las vamos a ver con más detalle la próxima vez, ¿vale? 00:21:11
Y ya está. 00:21:18
Subido por:
Stefano C.
Licencia:
Reconocimiento - No comercial - Sin obra derivada
Visualizaciones:
10
Fecha:
7 de febrero de 2024 - 12:21
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
21′ 22″
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:
59.33 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid