Saltar navegación

Clases Abstractas: ejemplo - 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.

6 visualizaciones

Descargar la transcripción

Vale, voy a grabar este ejemplo así si habláis, si os interesáis a grabar vuestra voz, ¿vale? 00:00:00
Entonces voy a crear un pequeño ejemplo de clase abstracta, ¿vale? 00:00:08
Lo hemos hablado tanto, mucho, por lo tanto vamos a trabajar con esto de las figuras geométricas 00:00:13
porque es más o menos más claro en la cabeza, como primer ejemplo. 00:00:18
Luego hacemos ejemplos sobre otras cosas, ¿vale? 00:00:23
Entonces, voy a crearme una clase, que es la clase figura o figura geométrica, ¿vale? 00:00:24
Esta clase de aquí quiero que sea una clase abstracta, es decir, por ahora no dejamos las abstractas, luego así vemos qué pasa, ¿vale? 00:00:34
Entonces, una clase figura, cuando tengo una figura tengo que tener algo común a todas las figuras del multiverso. 00:00:43
que tiene en todas las figuras del multiverso, triángulo, cuadrado, rectángulo, y un método 00:00:50
que por ejemplo es si public void dimeLados que dice si tengo más numLados, string s es igual 00:01:05
a numlados 00:01:38
numlados 00:01:48
menos o igual a cero 00:01:52
S es igual 00:01:54
infinitos 00:01:58
¿Os gusta? 00:02:01
Así cuando tengo el círculo 00:02:10
le pondré cero lados 00:02:11
y así me dice que tiene lados infinitos. 00:02:14
¿Sí? 00:02:18
Va, ok. 00:02:19
Esto es mi figura. 00:02:20
Voy aquí 00:02:24
y digo 00:02:25
hago un main 00:02:28
una clase main para probar estas cosas 00:02:31
y ahora nadie me prohíbe de crear 00:02:33
un objeto figura 00:02:40
figura f 00:02:41
es igual a new figura 00:02:44
f.numLados 00:02:46
es igual a 4 00:02:51
y ahora digo 00:02:54
F punto 00:02:57
Dime lados 00:03:00
¿Vale? 00:03:01
Aquí 00:03:03
Tengo cuatro lados 00:03:03
Le pongo cero lados 00:03:07
Y dice tengo infinitos lados 00:03:09
¿Sí? ¿De acuerdo? 00:03:12
Vale, esto feo 00:03:14
¿Vale? Hemos dicho no lo quiero hacer 00:03:15
Lo quiero poner aquí 00:03:18
Entonces necesito 00:03:19
Un constructor, me voy aquí y me hago un constructor 00:03:22
Figura 00:03:24
public figura de int numlados, dis.numlados, es igual a numlados, t. Función. ¿Dudas hasta aquí? 00:03:27
Vale. Ahora, aquí subentra el concepto de val, pero esta clase versífigura es relativamente fea, 00:03:51
vale en el sentido que ahora yo se me ha quedado un poco coja porque en realidad la figura tiene 00:03:59
muchas otras cosas en común todas las figuras que pero no las estoy poniendo aquí porque no 00:04:07
puedo porque podría decir vale yo quiero que las figuras puedan calcular su área puedo saberla aquí 00:04:11
no entonces me bloqueo pero si dijera hoy mira yo quiero que cuando uno usa esta figura pues 00:04:17
sea obligado a implementar algunos métodos que todas las figuras tienen, como por ejemplo 00:04:26
el calcular su área. 00:04:33
Pues entonces decido, digo mira, voy a ponerlo así, este es el cústico, voy a decir public 00:04:35
abstract doble calcula área punto com. 00:04:44
Esto se enfada, ¿vale? 00:04:51
Pero lo que estoy diciendo aquí es, si yo quiero ahora construir un método que exista 00:04:56
en la figura, que no puedo saber cómo se implementa, pero que si alguien hereda de 00:05:00
mí sea obligado a implementarlo, y que sepa implementarlo, cuando el cuadrado implementará 00:05:08
la figura, pues lo hará, ¿vale? 00:05:16
Entonces, ¿qué voy a hacer aquí? 00:05:20
se enfada porque me dice, 00:05:24
the abstract method 00:05:25
can only be defined 00:05:26
by an abstract class. 00:05:29
No puedo definir 00:05:31
un método abstracto 00:05:32
si la clase no es abstracta. 00:05:33
No problemo. 00:05:35
Mi clase es abstracta. 00:05:40
Todo fenomenal. 00:05:42
Oye, como un constructor 00:05:43
de una clase abstracta, 00:05:45
si no puedo construir 00:05:46
la clase abstracta, 00:05:47
no, no puedo. 00:05:48
Y de hecho, 00:05:49
se enfada. 00:05:51
No se puede construir 00:05:55
una figura. 00:05:56
La figura es abstracta. 00:05:58
Si yo construyera una figura, me quedaría este método y ¿qué hago con ello? 00:05:59
¿Me entiende? 00:06:08
¿Dudas hasta aquí? 00:06:10
¿Vamos? 00:06:14
Entonces ya no puedo crear figuras. 00:06:15
Si voy aquí, me dice, cannot distance the type figura. 00:06:18
No puedo distanciarla por el tipo figura. 00:06:22
¿Por qué? Porque es astral. 00:06:24
Pero si tengo un constructor. 00:06:26
Si el constructor me sirve para crear este objeto, ¿vale? 00:06:29
desde una subclase. 00:06:33
O sea, la subclase llamará a este constructo 00:06:36
para implementar la parte 00:06:38
de en un lado. 00:06:39
Pero por sí mismo no se puede llamar. 00:06:41
Esto fue. 00:06:47
Vale, muy bien. 00:06:48
Entonces estamos aquí. 00:06:50
Me creo otra clase. Vamos a 00:06:52
implementar. Me creo otra clase de rectángulo. 00:06:53
Rectángulo. 00:06:58
Rectángulo 00:07:03
que tiene, tiene int 00:07:04
lado horizontal 00:07:07
int 00:07:09
lado vertical 00:07:11
¿si? 00:07:13
cuidado, rectángulo ¿qué es? 00:07:16
una figura 00:07:18
entonces puede decir 00:07:19
extends 00:07:21
figura 00:07:23
¿vale? y se enfada 00:07:24
¿por qué se enfada? 00:07:27
porque en el momento en que extendo una clase 00:07:32
abstracta 00:07:35
¿vale? 00:07:36
pillo el deber de implementar todos sus métodos abstractos. 00:07:38
Y no lo he hecho. 00:07:44
Además, esto se enfadará probablemente por el constructor. 00:07:46
Sí, implicit sobre constructor. 00:07:50
Vamos a ver que si pongo el constructor, 00:07:52
public rectángulo que pilla 4, 00:07:53
no, int lado h, int lado v, lo que hace es super 4, dis.lado h es igual a lado h, dis.lado v es igual a lado v. 00:08:02
Sí, lo que decíamos ayer, el número de lados de un rectángulo siempre será 4, no lo hago pasar por parámetros, no puedo hacer rectángulos de 7 lados, que no existen, ¿sí? Claro, entonces, si ahora hago así, él sigue enfadándose, pero, oye, estoy usando ahora, no estoy usando el constructor por defecto, estoy usando el constructor definido aquí, no entiendo por qué te enfades, 00:08:28
Aquí me dice, the type Rectangulo must implement the inherited abstract method figura.calcularia. 00:08:53
El tipo Rectangulo tiene que implementar el método abstracto heredado calcularia. 00:09:02
Tiene que hacerlo. 00:09:12
De hecho aquí me da también quick fixes de, oye mira que hago. 00:09:13
Y hay dos opciones. 00:09:18
Añade los métodos no implementados 00:09:18
O otra opción 00:09:22
Haz que el rectángulo sea abstracto 00:09:23
Podría ser que esta clase 00:09:26
Yo tenga figura 00:09:28
Luego tenga figura plana 00:09:29
Y figura 3D 00:09:31
¿Vale? 00:09:32
Entonces figura es para todos 00:09:33
Y de ellos heredan figura plana o figura 3D 00:09:35
Y estas también sean abstractas 00:09:39
Y luego desde figura normal, plana 00:09:41
Heredan rectángulo cuadrado es lo que tenemos 00:09:44
y de figura 3D eran esfera, 00:09:47
cubo y cosas por el estilo. 00:09:49
Puedo heredar y ser abstracto. 00:09:52
Si soy abstracto, no necesito 00:09:55
implementar nada. Puedo implementar 00:09:57
o no. 00:09:59
Entonces, a nosotros nos interesa 00:10:02
esta opción, ¿vale? Aquí. 00:10:03
Este era el método 00:10:06
que me faltaba. 00:10:07
Entonces, public double calcularia 00:10:09
return 0 porque 00:10:11
él no sabe cómo hacer. 00:10:13
Yo sé que tengo que hacer return. 00:10:14
lado H por lado V. Perfecto. Ya lo tenemos. Ahora tenemos figura que es abstracto, no puedo 00:10:18
calcularlo, rectángulo que cuando creo un rectángulo me llama, me crea una figura y una vez creada la 00:10:35
figura implementa lo que sea. Y implementa, fijaos, le hice el overwrite. Aquí me está definiendo que 00:10:41
este de aquí está overheadando este de aquí. Esto me sirve porque hago un control del procesador 00:10:49
que entiende que mi intención es hacer un override de este nombre aquí, de este método aquí, 00:10:58
y si me equivoco y no lo hago exactamente igual, me da un error. Por ejemplo, si yo quito esto, 00:11:09
perfecto. Pero en el momento en que le digo que es un override, me está diciendo, mira, tú estás 00:11:20
intentando overridear, pero no existe este método para sobrescribir. Este método, con el entero, 00:11:27
con esta firma, no existe en la clase superior. Está diciendo, el método calcular a int, vale, 00:11:36
del tipo rectángulo. 00:11:45
Mast Override and Implemented 00:11:46
or Supertype Method. 00:11:47
Esto, calcular el int, 00:11:50
debería estar en el padre. 00:11:53
Y no está. 00:11:56
Por lo tanto, no me puedes meter Override. 00:11:57
Es como una forma extra 00:12:01
para estar seguro que si yo estoy 00:12:04
declarando, lo voy a sobrescribir 00:12:06
y él me ayuda a decir, vale, si lo has 00:12:08
sobrescribido correctamente o no. 00:12:10
De esta forma. 00:12:13
Así. 00:12:15
¿Esto está bien? Vamos a jugar con él. Entonces, ¿qué puedo hacer ahora? Puedo crear un rectángulo. 00:12:15
Dejadme antes de jugar hacer otra cosa. Crea una cosa solo para rectángulos. 00:12:27
Que es public void rectanglear. Que solo lo pueden hacer los rectángulos. 00:12:32
¿Vale? Es decir, si yo soy muy rectángulo y mucho rectángulo, está rephraseando algo. 00:12:45
¿Sí? Entonces, ¿ahora qué puedo hacer aquí? Puedo crear un rectángulo. 00:12:57
Rectángulo, R es igual a new rectángulo. 00:13:05
parámetros, tengo que poner 00:13:09
el lado horizontal y vertical 00:13:14
7, 3 00:13:16
vale, fenomenal, y ahora que puedo hacer 00:13:18
con rectángulo, R punto 00:13:22
pues puedo acceder a su lado 00:13:24
H, puedo acceder a su lado V 00:13:26
puedo acceder a num lados 00:13:28
que es del padre, veis que es de figura 00:13:30
aquí no puedo hacer zoom 00:13:32
porque a veces se me bloquea el vídeo 00:13:34
si a vosotros 00:13:36
no lo veis 00:13:37
está en streaming 00:13:39
luego está calcularia 00:13:41
que es de rectángulo 00:13:45
también dimelados que es de figura 00:13:46
o sea yo desde aquí puedo acceder 00:13:48
a todo lo que es rectángulo 00:13:51
y a todo lo que es figura 00:13:52
también puedo rectangulear 00:13:54
que es una cosa solo de rectángulo 00:13:57
que no existe en figura 00:13:59
¿sí? 00:14:00
puedo hacer todas estas cosas 00:14:02
entonces le puedo decir 00:14:03
siso r.calcularia 00:14:04
Luego puedo hacer R.rectangular. 00:14:11
Luego puedo hacer R.dimelados. 00:14:17
Todo esto funciona. 00:14:22
¿Vale? 00:14:26
Fijaos que esto es de figura sobre escrito en rectángulo. 00:14:29
Esto es solo de rectángulo. 00:14:36
Y esto es solo de figura. 00:14:40
sea definido en figuras y no sea sobre escrito en rectángulos. Puedo usar métodos sobre escritos, 00:14:42
métodos míos y métodos de mi padre. ¿Duda hasta aquí? Vale. Otra cosa que puedo hacer es, 00:14:50
figura f es igual a new rectángulo de 3, 4. Ahora, si yo hago este punto, aquí me aparecen 00:14:57
numlados, me aparece calcularia, me aparece bimelados, pero no me aparece ni 00:15:20
rectángular ni calcular de figura. Entonces vamos a ver qué pasa. Primero no puedo acceder, no me 00:15:27
aparecen ni lado h ni lado v. No puedo acceder a esas variables porque ellos son una figura como 00:15:37
referencia. El rectángulo es una figura. Como mi manejador del objeto es una figura, 00:15:45
sólo puede usar los comandos de figura. No puede usar los comandos del rectángulo. ¿Se entiende? 00:15:53
Entonces, yo aquí puedo hacer este punto, 00:16:03
Dime lados 00:16:08
Y va a funcionar 00:16:11
Perfectamente 00:16:15
Tengo cuatro lados 00:16:16
Pongo un círculo divisorio 00:16:19
Esto lo escribe el primer objeto 00:16:29
Hasta aquí 00:16:33
Y luego empieza otro objeto 00:16:33
¿Vale? 00:16:36
Y este objeto dice 00:16:37
Tengo cuatro lados 00:16:38
Ahora, si yo hago esto mismo 00:16:39
Con este 00:16:43
Este calcular 00:16:46
es el de figura o el de rectángulo 00:16:52
por 00:17:09
por qué por 00:17:14
por 00:17:18
por 00:17:20
por 00:17:30
Estoy llamando 00:17:34
el método de rectángulo 00:17:43
y no de figura por 00:17:46
¿Por qué estaba acercando a la instancia? 00:17:47
¿Al método de la instancia? 00:17:53
Por 00:17:56
¡Exacto! 00:17:57
Por 00:18:04
¿Qué estamos estudiando esta mañana? 00:18:05
Ah, porque es polimórfico 00:18:09
Pero es un método polimórfico. 00:18:11
¡Por polimorfismo! ¡Muy bien! 00:18:13
Habéis llegado enseguida. 00:18:16
¿Vale? 00:18:18
¿Sí? 00:18:19
Y la razón es... 00:18:21
O sea, por polimorfismo, y nosotros 00:18:23
informáticos los entendemos. ¿Vale? 00:18:25
Si lo quiero explicar, pues porque 00:18:27
efectivamente se usa el método 00:18:29
de la instancia, 00:18:31
no de la referencia. 00:18:33
La referencia es de tipo figura, 00:18:36
pero la instancia es un rectángulo. 00:18:39
Entonces va a usar 00:18:40
Calcular 00:18:42
Por otro lado, ¿existe calcular en figuras? 00:18:43
No está definido 00:18:48
Entonces, ¿qué debería hacer? 00:18:49
Lo puedo usar sobre una figura 00:18:54
Justo porque en realidad 00:18:56
Es un rectángulo 00:18:58
Y estoy usando su versión rectangular 00:18:59
De la del calcular 00:19:03
Estoy usando calcular del rectángulo 00:19:05
00:19:07
O sea, has creado 00:19:08
un objeto nuevo 00:19:10
con la clase figura 00:19:11
que es un rectángulo 00:19:14
con la clase rectángulo 00:19:16
pero diciendo que 00:19:17
su referencia, su tipo de variable 00:19:19
es una figura, ¿por qué puede hacerlo? 00:19:22
porque rectángulo es una figura 00:19:24
píllalo con las, cuando yo te digo 00:19:29
float 00:19:32
no, mi 00:19:37
número es igual a 00:19:38
5 es un float 00:19:41
no, pero entonces ¿por qué me lo pilla? 00:19:43
porque 5 es también un float 00:19:49
un float no es un int 00:19:51
pero cualquier int es un float 00:19:56
para esto extrae números primitivos 00:19:57
entonces píllalo con la 00:20:03
con pizzas 00:20:04
¿sí? pero la idea es esa 00:20:06
cualquier rectángulo es una figura 00:20:09
entonces yo puedo decir 00:20:11
ay mira, esta es una figura, sí 00:20:13
pongo dentro un rectángulo perfecto ahora el manejador el que decide qué puede hacer es de 00:20:15
tipo figura entonces cuando hago este punto me saldrán todas las opciones que tiene una figura 00:20:22
o un rectángulo el rectángulo tiene cosas extra para hacer él no puede hacerlas pero todo lo que 00:20:28
puede hacer una figura, lo puede hacer. Porque el rectángulo es una figura. Esto es un up-casting. 00:20:37
No, porque si ahora yo quisiera decir, vale, ok, pero yo sé que f es un rectángulo. ¿Puedo usar 00:20:52
algo de rectángulo? ¿Puedo hacer este método de aquí que es sólo de rectángulos usando f? No, 00:21:00
No, porque si yo hago este punto, no aparece aquí rectángulear. 00:21:09
Porque una figura no puede hacer como un rectángulo. 00:21:15
Es el rectángulo que hace así. 00:21:18
Pero ella lo que puede hacer es decir, oye, mira, espera, espera, espera. 00:21:20
Rectángulo. 00:21:24
F, para que se entienda. 00:21:28
Punto. 00:21:33
Y ahora me está diciendo, pilla este. 00:21:35
Trátalo como si fuera un rectángulo. 00:21:37
Y a este punto me salen todas las opciones que puedan hacer un rectángulo, ¿vale? 00:21:40
Incluido rectangulear. 00:21:47
Y me funciona. 00:21:50
Porque en realidad F es una referencia de tipo figura, pero dentro tiene un objeto rectángulo. 00:21:53
Entonces puede hacer un... 00:22:00
Explícito. 00:22:03
Es explícito. 00:22:05
Hacer un downcasting explícito 00:22:07
Al decir, oye mira, tú eres una figura, lo sé 00:22:10
Pero compórtate como un rectángulo 00:22:12
¿Por qué? Porque lo digo yo 00:22:14
¿Está claro? 00:22:16
¿Qué es? 00:22:18
No me lo va a hacer 00:22:22
No me permite hacer, ¿vale? 00:22:22
Necesito otra parte 00:22:49
Lo hacemos solo en un minuto 00:22:50
¿Vale? 00:22:52
Vamos a hacer 00:22:52
Triángulo también 00:22:54
O otra cosa 00:22:56
¿Vale? 00:22:58
Necesito triángulo, triángulo, el triángulo que tiene, tiene interlado uno, interlado dos, interlado tres, extensa figura, aquí tiene public, triangle, surche, constructorus infilde, tac, tac, tac, tac, ¿vale? 00:22:58
de un lado se los quito 00:23:38
le pongo 3 00:23:40
vale 00:23:42
como estoy extendiendo triángulos 00:23:45
la figura se enfada 00:23:48
porque dice le falta 00:23:50
los métodos he dedicado 00:23:51
entonces los añado 00:23:54
como calculo la área del triángulo 00:23:56
pues no tengo ni idea 00:23:59
pues 00:24:00
da siempre 00:24:01
hay una fórmula para calcular la área del triángulo 00:24:03
a partir de los lados, pero no me las he de vengar, ¿vale? 00:24:06
Es solo base para el truco. 00:24:10
Pero luego lo modificamos, a lo mejor esto hace unas cosas raras. 00:24:13
Si ahora vuelvo aquí y le digo, oye, mira, haz un casting petra, 00:24:19
que aquí le hago el método que solo los triángulos pueden hacer, 00:24:31
que es public void triangular. 00:24:34
que dice inciso triángulo. Si ahora yo le digo a esta figura, que es una figura, que es un 00:24:37
rectángulo, oye mira, puede ser un triángulo y triangulear. Él me dice claro, cómo no, soy una 00:24:57
figura, existe triángulo que hereda de figura, pues te voy a tratar como un triángulo. Yo lo 00:25:11
lanzo y ¿qué pasa? Explota. Con una class-cast exception. Tú eres un rectángulo, me estás 00:25:20
diciendo trátame como un triángulo, pero yo no tengo dentro la estructura de un triángulo, 00:25:34
entonces no puedo ser un triángulo. Yo tengo todo lo que tiene figura y todo lo que tiene 00:25:41
un rectángulo. Si tú me dices, úsame como figura, fenomenal. Úsame como rectángulo, fenomenal. 00:25:46
Pero cuando tú me dices, oye, mira, úsame como un triángulo, pues no es correcta. 00:25:51
No es un casting correcto. No puedo tratar un cuadrado, un rectángulo, como si fuera un triángulo. 00:25:57
Entonces, él explota. Cuidado que no lo entiende él. 00:26:04
Porque una figura, técnicamente, es castigable a un triángulo. 00:26:10
si tú aquí en vez de 00:26:14
new rectángulo hubieses hecho new triángulo 00:26:17
pues lo habrías podido hacer 00:26:19
¿entiendes? 00:26:21
pero no lo puedes hacer con este 00:26:27
rectángulo de aquí 00:26:29
que da la posibilidad 00:26:30
de cerciorarme 00:26:35
f instancio 00:26:39
triángulo 00:26:42
entonces hablo 00:26:47
triángulo 00:26:51
and say if 00:26:55
f instancio cuadrado, no, que es rectángulo, pues entonces, rectángulo f, punto, 00:27:01
¿me entiendes? Si yo no lo sé, si este es un triángulo o un rectángulo, porque me lo han dado por teclado, 00:27:25
porque está en un array, porque no lo sé qué. 00:27:55
Siempre me puedo preguntar, oye, mira, 00:27:57
si eres un triángulo, entonces da un 00:27:59
cast a la triángulo y usa los métodos 00:28:01
de triángulo. Si es un rectángulo, 00:28:03
da un cast a un rectángulo y usa 00:28:05
los métodos de rectángulo. 00:28:07
¿Está de acuerdo con esto? ¿Está aquí? 00:28:12
¿Sí? 00:28:15
Entonces, 00:28:16
cosa uno, 00:28:18
me creo un rectángulo 00:28:20
y tengo rectángulo, ¿vale? 00:28:22
Y uso como referencia un rectángulo. 00:28:24
Esto puede hacer todo lo que hace un rectángulo. 00:28:26
opción número 2 crea un rectángulo pero lo pongo dentro de la figura esto puede hacer sólo lo que 00:28:28
hace una figura a menos que no haga un down casting explícito siempre y cuando pueda hacerlo 00:28:34
ya seguro que lo esté seguro que lo puede hacer la tercera opción que venía aquí era 00:28:44
es crear un padre con tipo padre pero aquí no lo puede hacer puede hacer figura este 00:28:53
F2 es igual a new figura de 3. ¿Por qué no? Porque es una clase abstracta. Si la clase 00:28:58
es abstracta no puedo crearla. ¿Dudas? Vamos a crear una clase nueva. Cuadrado. ¿De qué 00:29:11
era el cuadrado? Extends. Rectángulo. Bueno, implícito sobre constructo de rectángulo 00:29:28
no funciona vale public cuadrado intel super l l lo veis cuadrado es un rectángulo con todos 00:29:51
los lados iguales y mi constructor de rectángulo pillaba los dos lados vertical y horizontal pues 00:30:14
le estoy pasando como parámetros el mismo para que el vertical y horizontal tengan el mismo tamaño 00:30:21
en automático esto me costará me costará una figura de cuatro lados tendré una figura de 00:30:27
cuatro lados con alrededor un rectángulo que tiene el lado del lado iguales y comentó con 00:30:37
alrededor este cuadrado aquí sí cuadrado porque yo estando de rectángulo porque yo estando rectángulo 00:30:44
entonces ahí está. 00:30:59
¿Y por qué has puesto un solo parámetro 00:31:03
en el constructor de cuadrados? 00:31:05
Porque ¿cuántos parámetros necesitas 00:31:07
para un cuadrado? 00:31:09
Te dices, un cuadrado de lado 2 y 2. 00:31:13
O dices, un cuadrado de lado 2. 00:31:17
Aquí, cuadrado de lado 2. 00:31:19
Luego te lo duplico 00:31:21
porque en mi estructura 00:31:22
del ejemplo que estoy haciendo, 00:31:24
pues el rectángulo necesita dos lados, 00:31:25
el horizontal y el vertical. 00:31:27
Pues horizontal y vertical son 00:31:29
dos y dos. 00:31:30
para que sean cuadrados. 00:31:34
Tened en cuenta que aquí tengo que sobreescribir, calcular área. 00:31:37
No, porque técnicamente yo estoy redando el de rectángulo 00:31:43
y ya rectángulo lo ha implementado. 00:31:52
Entonces no hay problema, está implementado ya. 00:31:55
¿Me vale el calcular área de rectángulo? 00:31:58
Sí, porque sustancialmente estos serán igual, me están haciendo dos por dos. 00:32:01
¿Vale? Vamos a complicarlo un poquito. Vamos a poner que la figura, además de este método abstracto, tiene también el método abstracto, cálcula perímetro, entonces errores por todos lados, triángulo, cálcula perímetro del triángulo, pues vamos a crear cálcula perímetro y será lado 1 más lado 2 más lado 3. 00:32:06
Justo. Vale. Me voy al rectángulo. El rectángulo me dice, oye, mira, no está implementado. Vamos a implementar. 00:32:39
¿Cómo se calcula el perímetro del rectángulo? 2 por lado H más 2 por lado V. 00:32:50
Bueno, vale. Quería hacer una cosa distinta, pero... ¿Sí? 00:33:00
Y hacemos también que esto escriba RECTÁNGULO PERÍMETRO. 00:33:06
El método calcula perímetro escribe soy rectángulo, calculo mi perímetro y lo calculo. 00:33:20
Imaginámonos que ahora a nivel de cuadrado quiera sobreescribir también eso. 00:33:44
Entonces le pongo atoverride 00:33:53
y le pongo 00:33:55
esto aquí. Y ahora digo, soy cuadrado. 00:34:01
Y aún 00:34:15
si esto me vale, 00:34:15
pues lo que hago yo ahora es 00:34:17
4 por lado h. 00:34:19
Misma cosa. 00:34:27
Me valía el otro. Pero es para ver que 00:34:28
ahora escribo otra cosa. 00:34:30
Entonces 00:34:33
me vuelvo a mi main y voy a 00:34:33
jugar con esto. 00:34:36
Voy a 00:34:38
anular todo. 00:34:39
Y va a crear un rectángulo. 00:34:42
Nu rectángulo 7, 3. 00:34:48
Otra vez. 00:34:54
2, 3. 00:34:55
Y luego un cuadrado. 00:34:58
Es igual a nu cuadrado. 00:35:01
Y luego figura F1. 00:35:09
Es igual a new rectángulo de 5, 6. 00:35:15
Y figura fc2 es igual a new cuadrado de 5. 00:35:24
Si ahora yo llamo r2.calculaperímetro, 00:35:33
que me hará, dice, soy un rectángulo perímetro y calculará superado, ahora no lo sé cuánto es. 00:35:40
Dame un segundo, que así acabo. Esto me dice el perímetro, pero lo ha calculado como rectángulo. 00:35:51
¿Lo veis? Si ahora hago lo mismo usando C, ¿qué hará? Usa cuadrado. Y hasta aquí todo bien. 00:36:07
Si ahora hago lo mismo y pongo S1, ¿qué hará? ¿Qué método usa? El de figura. 00:36:26
¿El de rectángulo o el de cuadrado? El de rectángulo. ¿Veis? ¿Por qué? Porque soy una referencia de tipo figura, pero dentro soy un rectángulo y se usa el método de la estancia. 00:36:40
último 00:37:01
¿cuál se usa? 00:37:07
el de cuadrado 00:37:16
porque soy una referencia de figura 00:37:17
pero en realidad soy un cuadrado 00:37:24
perdón, necesito lo último 00:37:28
rectángulo R3 00:37:30
es igual a 00:37:34
µ cuadrado 00:37:36
de 7. 00:37:38
¿Lo puedo hacer? 00:37:40
Sí. 00:37:42
El cuadrado es un rectángulo. 00:37:43
Y si ahora hago esto otra vez 00:37:46
y hago R3, 00:37:49
¿qué hace? 00:37:51
Cuidado que el rectángulo lo tiene. 00:37:53
¿Qué hago? 00:37:54
¿Cuál usa? 00:37:55
El de cuadrado. 00:37:58
Porque dentro es un cuadrado. 00:38:00
Aquí escribo rectángulo cuadrado. 00:38:04
esto es perímetro 00:38:06
hay que cambiar 00:38:08
ahora lo volvemos a rehacer 00:38:09
y reanudar 00:38:11
Materias:
Programación
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado superior
      • Segundo Curso
Autor/es:
Stefano Chiesa
Subido por:
Stefano C.
Licencia:
Reconocimiento - No comercial
Visualizaciones:
6
Fecha:
19 de enero de 2026 - 11:55
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
38′ 16″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
321.00 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid