Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Clase 19-03-24 - 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:
Bueno, pues esa es una descripción muy habitual en la mayoría de las situaciones que uno tiene que gestionar en la vida real, ¿no? Tiene que gestionar una serie de entidades que son cosas y además hacen cosas, son y hacen, como estos elfos, que son criaturas místicas, pero además tienen poderes, ejercen poderes.
00:00:01
entonces, como resultado del análisis
00:00:24
de una situación, nosotros podemos llegar a esta conclusión
00:00:27
mis empleados, mis facturas, mis no sé qué
00:00:30
son esto, son esto
00:00:33
y además hacen todas estas cosas
00:00:35
entonces yo tengo que hacer ahora todo mi diseño de clases
00:00:38
para hacer ahí una foto bonita de toda esa realidad
00:00:40
de tal forma que me quede ya una aplicación
00:00:44
pues manejable y fácilmente ampliable
00:00:47
porque la foto está bien hecha
00:00:51
entonces puedo ampliarla bien
00:00:53
bueno, pues esa es la idea, cuando uno se ha dado cuenta
00:00:54
de que esas entidades que va a manejar
00:00:57
son cosas y además hacen cosas
00:00:58
pues entonces habrá relación de herencia
00:01:00
de yo soy esto
00:01:02
pues heredo de esto, entonces me hago
00:01:05
una super clase de la que heredan
00:01:07
todas esas entidades que he visto
00:01:08
que son algo, me hago una super clase
00:01:11
y seguramente eso me ayude
00:01:13
me ayude en mi aplicación
00:01:14
y luego además como hacen
00:01:17
cosas, ejercen un comportamiento
00:01:19
pues
00:01:21
Eso se suele recoger en interfaces
00:01:22
Interfaces que recogen el comportamiento a través del método
00:01:25
Entonces, esas entidades serán cosas
00:01:28
O lo que es lo mismo, heredarán
00:01:31
Y además harán cosas
00:01:32
O lo que es lo mismo, implementarán interfaces
00:01:34
Y pueden hacer las dos cosas
00:01:37
Dentro de mi jerarquía, yo heredo de esto porque soy eso
00:01:38
Y además implemento esta interfaz porque me comporto de esa manera
00:01:43
Pues bueno, este ejercicio era eso
00:01:48
En resumido
00:01:51
Los dragones, elfos y hipogrifos
00:01:53
Pues son criaturas místicas
00:01:56
Y tienen poderes
00:01:57
Entonces como son criaturas místicas
00:01:59
Pues una clase criatura mística
00:02:01
Que luego habría que decidir si es abstracto o no
00:02:03
Depende de lo que me interese
00:02:05
Y luego una interfaz
00:02:07
Que es poder místico
00:02:09
Porque eso se refiere ya a
00:02:11
Ejercer, hacer cosas
00:02:13
En este caso activar los poderes o lo que fuera
00:02:15
Pues venga
00:02:17
Entonces
00:02:19
aquí ya el diseño como nos lo daban
00:02:20
pautado, pues había poco que pensar
00:02:23
primero la interfaz
00:02:25
con el método
00:02:27
pues ya está, entonces
00:02:28
ah bueno, pues todo
00:02:31
vale, pues la interfaz
00:02:38
entonces la interfaz ya sabéis que solamente puede tener
00:02:50
o variables constantes
00:02:53
porque son variables que uno
00:02:55
identifica en la aplicación que le interesan
00:02:57
porque las usan un montón de clases
00:02:58
pues el sitio más recogidito, ahí más apañado
00:03:00
para ponerlo es en la interfaz
00:03:03
una variable public static final
00:03:04
del tipo que sea
00:03:06
entonces en las interfaces veréis muchas veces que hay
00:03:07
public static final
00:03:11
número pi, lo que sea, porque son
00:03:12
constantes, valores constantes
00:03:14
que usan muchas clases
00:03:17
pues los meto ahí todos
00:03:19
eso puede tener una interfaz, luego además que puede tener
00:03:20
que es lo que tiene
00:03:22
métodos vacíos que
00:03:24
recogen actuaciones
00:03:26
que tienen
00:03:29
que implementar la gente que implementa la interfaz
00:03:30
En este caso, la única actuación que había era la de activar poder.
00:03:33
Recordad que son públicos por definición, no hay que ponerlo.
00:03:40
Esta era esta interfaz, ya está, no tiene más.
00:03:45
Luego, entonces, las criaturas esas, aparte de implementar esto,
00:03:50
son criaturas místicas.
00:03:55
Entonces, como todas son criaturas místicas,
00:03:59
pues tiene sentido hacer esa clase, esa superclase.
00:04:01
¿Qué me dice aquí?
00:04:04
esta clase abstracta
00:04:05
que ya me dicen directamente que sea abstracta
00:04:07
pues venga, esta clase abstracta
00:04:10
hago una nueva clase
00:04:14
y ahora
00:04:19
esta clase
00:04:27
tiene que implementar esta otra
00:04:30
entonces
00:04:33
¿qué implicaciones tiene esta relación de implementación?
00:04:36
la implicación que tiene es
00:04:41
que estamos diciendo todos los que sean
00:04:43
criaturas místicas, todos
00:04:45
sea dragón, elfo, sea quien sea
00:04:47
todos tienen que tener poderes
00:04:49
es lo que estamos diciendo, todos
00:04:52
si quisiéramos que
00:04:53
solo tuvieran poderes los elfos
00:04:56
y los dragones no
00:04:57
pues entonces no haríamos la relación de implementación aquí
00:04:58
la haríamos directamente
00:05:02
el elfo implementa el poder místico
00:05:03
y el dragón no, pero aquí no la haríamos
00:05:05
porque si la hacemos aquí
00:05:07
todo el que herede de criatura
00:05:09
mística, todo el que herede
00:05:11
a través de esa relación de herencia
00:05:13
va a tener que implementar poder místico
00:05:15
porque éste lo implementa
00:05:17
entonces, aquí
00:05:19
haciendo esta relación de implementación decimos
00:05:21
oye, todo el que herede de aquí
00:05:22
a través de esta relación de herencia
00:05:24
tiene que implementar ésta obligatoriamente
00:05:26
entonces todas las criaturas místicas
00:05:29
todas van a tener
00:05:31
un poder
00:05:32
¿eso es lo que queremos?
00:05:34
sí, pues estupendo, ¿no es lo que queremos?
00:05:36
pues hay que cambiar el diseño
00:05:38
vale, entonces como criatura mística
00:05:39
implementa el poder místico
00:05:42
ya el compilador no lo está diciendo, me lo está diciendo
00:05:43
oye, si implementas esto
00:05:45
tienes que obligatoriamente
00:05:46
darle cuerpo a este método
00:05:49
y si no se lo das
00:05:51
te quedas con el vacío
00:05:53
y si te quedas con el vacío
00:05:56
no te queda más remedio que ser abstracto
00:05:57
vale, entonces en nuestro caso
00:05:59
ya nos habían dicho que esta clase
00:06:01
fuera abstracta
00:06:03
entonces como ya nos han dicho que esta clase
00:06:04
fuera abstracta, ya no tenemos ninguno
00:06:07
obligación, ninguna
00:06:09
de implementar este método
00:06:10
¿vale? ninguna
00:06:13
porque criatura mística lo tiene dentro
00:06:16
pero lo tiene vacío también
00:06:19
y no pasa nada porque lo tenga vacío
00:06:21
porque es abstracta, no pasa nada porque lo tenga vacío
00:06:23
si esto lo quitamos
00:06:26
no puede quedarse así
00:06:28
tiene que darle un cuerpo
00:06:31
al activar poder
00:06:33
claro, aquí el tema es que la criatura
00:06:35
mística no sabe cómo activar su poder todavía.
00:06:37
Ya lo sabrá la heredera.
00:06:40
Entonces, como no sabe, pues aquí la
00:06:41
solución es dejarla como
00:06:43
abstracta. Aquí es la solución.
00:06:45
Uno en un diseño
00:06:49
de estos podría decir, vale, la criatura
00:06:49
mística todavía no sabe cómo activar
00:06:51
su poder. Todavía no sabe cómo hacer este
00:06:53
método. No sabe todavía.
00:06:55
Pero yo tengo que sobrescribirlo.
00:06:57
Bueno, no pasa nada. Lo sobrescribo
00:06:59
porque es que estoy obligada
00:07:01
a sobrescribirlo y lo dejo
00:07:03
así. Ah, activar poder.
00:07:07
vale, uno en este juego de diseño
00:07:12
del que estamos hablando
00:07:26
que no os perdáis
00:07:27
forma parte de la programación
00:07:29
en un porcentaje mucho más elevado que el teclea
00:07:31
pues en este juego de diseño
00:07:33
uno podría
00:07:35
porque me sigue poniendo esto
00:07:36
no lo he escrito bien
00:07:41
ah, claro
00:07:46
que se me había puesto el public, vale
00:07:51
vale, porque yo aquí no pongo
00:07:53
el public porque ya digo que por defecto siempre
00:07:58
lo son, entonces aquí no hace falta en la
00:08:00
interfaz, pero cuando lo sobrescribes
00:08:02
cuando lo sobrescribes
00:08:05
la clase en la que lo sobrescribes
00:08:06
ya no es una interfaz
00:08:08
entonces en esa hay que poner el modificador
00:08:09
que sea, el que tú quieras
00:08:12
y este método es un modificador en public
00:08:13
aunque yo me lo haya ahorrado en interfaz
00:08:16
bueno, pues entonces en este juego de diseño
00:08:18
del que hablamos uno podría decir
00:08:20
vale, como implementas poder místico
00:08:22
yo tengo que sobrescribir sí o sí
00:08:24
pero ojo, estoy al nivel
00:08:26
de la jerarquía alto, criatura mística
00:08:28
Todavía no puedo activar el poder, todavía no puedo, pero me obliga a sobreescribirlo. Bueno, pues lo dejo así en blanco. Uno podría pensar que esta es una solución de diseño y hombre, lo es, pero es mala. ¿Por qué es mala? Porque ahora yo me pongo a hacer criaturas que hereden de esta. El dragón, el elfo, el hipogrifo, el quien sea. Me pongo a hacer criaturas que hereden de esta.
00:08:30
Como esta ya tiene este método hecho, aunque sea vacío, las clases herederas ya heredan esa versión y el compilador no me va a obligar a sobreescribirlo.
00:08:54
No me va a obligar, me va a decir, tú ya estás heredando una versión, quédate con esa o sobreescribe.
00:09:08
Entonces lo normal es que uno sobreescriba, porque cada criatura tenga ya su poder concreto y sobreescriba.
00:09:15
Pero si uno está alelado y se le olvida sobrescribir, deja a una criatura sin poder y la deja con este. Entonces es mucho más peligroso, ¿vale? Es mucho más peligroso porque te arriesgas a que todo lo que herede de aquí, todo lo que herede, a alguno se te olvide y le dejes ahí sin poder.
00:09:20
pues no, entonces no es una buena solución
00:09:38
la mejor solución es
00:09:41
oye, que criatura mística
00:09:43
todavía no está en condiciones
00:09:45
de activar su poder porque no sabe
00:09:46
si es elfo, si es pepito, si es juanito
00:09:48
pues entonces
00:09:50
yo no sobrescribo el método todavía
00:09:52
me quedo con la versión vacía
00:09:54
pero a cambio
00:09:57
digo, pues soy abstracta
00:09:59
y no pasa nada por decir que uno es abstracto
00:10:01
lo único que pasa
00:10:05
por decir que uno es abstracto
00:10:07
¿qué es? ¿qué implicación tiene que esa clase
00:10:08
sea abstracta? respecto a no serla
00:10:11
¿cuál es la única que tiene?
00:10:13
que alguien me diga algo
00:10:17
la única diferencia que hay entre una clase abstracta
00:10:18
y otra, ¿no? ¿cuál es?
00:10:23
afecto práctico
00:10:25
de lo que...
00:10:26
¿puedes llamar método de la clase abstracta?
00:10:28
la única diferencia
00:10:34
que no puedes crear objetos
00:10:35
es la única diferencia
00:10:38
que de una clase abstracta
00:10:41
no se pueden instanciar objetos
00:10:42
yo no puedo hacer un new criatura mística
00:10:44
nunca voy a poder hacer
00:10:47
un new criatura mística
00:10:49
nunca, porque es abstracta
00:10:50
si yo le quito el abstract
00:10:52
entonces
00:10:55
tendré que sobreescribir el método
00:10:57
activar poder
00:10:58
si podré hacer un new criatura mística
00:10:59
claro, la pregunta es
00:11:02
yo necesito que haya criaturas místicas genéricas
00:11:04
necesito que existan
00:11:07
pues no, en mi aplicación no hay criaturas místicas genéricas
00:11:08
o hay o dragones o elfos
00:11:11
o la otra cosa
00:11:13
hay eso
00:11:14
yo nunca voy a tener que hacer un new criatura mística
00:11:15
solamente voy a hacer un new dragón, un new elfo
00:11:18
un new no sé cuántos, unicornio, eso
00:11:21
pues entonces está abstracta
00:11:22
y siendo abstracta
00:11:25
hasta protegemos más la aplicación
00:11:27
porque evitemos que alguien instancie
00:11:29
algo que el mío que va a hacer va a ser molestar
00:11:31
bueno, pues este
00:11:33
diseño es mucho mejor que
00:11:35
las otras alternativas, que digo, que es no ponerla
00:11:37
abstracta, crearlo un método en blanco vacío
00:11:39
por las razones que estoy diciendo
00:11:41
Vale
00:11:43
Bueno, pues entonces
00:11:45
Seguimos
00:11:47
¿Qué más cosas?
00:11:51
¿Qué más cosas tenía la criatura mística?
00:11:54
Implementa el poder místico y patatín
00:12:02
Las clases abstractas
00:12:04
A diferencia de las interfaces
00:12:06
Pueden tener atributos
00:12:07
Lo que les dé la gana
00:12:08
Constructores, lo que quieran
00:12:10
Los constructores diréis
00:12:12
De nuevo, ¿y para qué me valen?
00:12:15
Si no puedes instanciar
00:12:16
valen para ser usados desde las clases herederas
00:12:17
mediante el súper, ¿verdad?
00:12:22
Era para eso, para un niño que valían.
00:12:24
Bueno, pues la criatura mística tiene nombre y edad
00:12:26
y un método abstracto de escribir criatura.
00:12:29
¿Vale?
00:12:33
Entonces, eso es un método abstracto,
00:12:34
con lo cual lo vamos a dejar sin cuerpo.
00:12:37
Lo que decía aquí es que este método está pensado para eso,
00:12:40
pero luego lo tendrán que sobreescribir las clases herederas.
00:12:43
Pues venga, todo el que quiera ser criatura mística
00:12:47
Pues tiene que tener su nombre y su edad
00:12:51
Hemos dicho, ¿no? Tiene que tener su nombre y su edad
00:13:03
Entonces, como hemos elegido que sean privados
00:13:09
Le ponemos Get y Set, si no son privados, pues no hace falta
00:13:14
Pero bueno, como habitualmente trabajamos así
00:13:17
Pues así lo dejamos
00:13:22
vale, y luego hemos dicho que además de todo esto
00:13:25
un método abstracto
00:13:28
un método abstracto, recordad que es un método sin cuerpo
00:13:30
que describe, vale, pues este es el método vacío
00:13:34
vale, y ahora ya tenemos las clases concretas
00:13:55
de las que ya que sí que se pueden crear objetos
00:14:01
que son tres, que cada uno añade una propiedad suya
00:14:03
pues venga, el dragón, el dragón tiene su nombre, su edad
00:14:07
Y aparte añade, pues vamos a ponerle el color
00:14:15
¿Vale? Añade el color
00:14:18
Se le podría hacer un constructor
00:14:25
O trabajar
00:14:27
Lo que haga falta
00:14:29
Entonces
00:14:32
El dragón es una criatura mística
00:14:37
Entonces como es una criatura mística
00:14:40
Pues entonces tiene que heredar
00:14:43
De criatura mística
00:14:44
Porque lo es
00:14:46
Es una relación de herencia
00:14:48
¿Vale?
00:14:50
entonces desde el momento en que
00:14:50
yo digo que es una criatura mística
00:14:53
pues entonces
00:14:55
empiezan los compromisos
00:14:56
empiezan los compromisos que son
00:14:58
¿eres criatura mística? pues lo siento
00:15:01
este método tienes que darle cuerpo
00:15:03
el describir criatura
00:15:05
y no solo eso
00:15:07
como a través de criatura mística
00:15:09
estamos implementando el otro
00:15:11
poder místico, pues también hay que implementar
00:15:13
el otro método
00:15:16
el activar poder, entonces en dragón
00:15:17
hay que implementar los dos
00:15:19
estamos obligados a implementar los dos
00:15:20
el que hereda de criatura mística
00:15:22
pero sin cuerpo
00:15:25
y el que
00:15:26
hereda
00:15:29
de poder místico
00:15:31
también sin cuerpo
00:15:32
está claro, ¿no?
00:15:33
la criatura mística tiene dentro
00:15:37
tiene dentro
00:15:39
heredado
00:15:41
el del poder místico, lo tiene dentro, heredado sin cuerpo
00:15:43
y lo puede tener sin cuerpo porque es abstracta
00:15:46
si no, no podría
00:15:48
Bueno, pues entonces
00:15:49
Vamos a decirle, venga, pues ala
00:15:51
Vamos a implementar los dos
00:15:53
Ala, estos son los dos
00:15:54
Y ahora aquí ya, pues uno pone lo que le dé la gana
00:15:58
Activo
00:16:01
Poder
00:16:11
Dragón
00:16:12
Vale
00:16:13
Activo poder del dragón
00:16:15
Y aquí, pues
00:16:17
Pues muestro la criatura
00:16:21
Lo que sea
00:16:24
Venga, pues nada
00:16:28
Get nombre
00:16:29
Sin espacios
00:16:36
Y sin nada
00:16:39
Get edad
00:16:39
Y get color
00:16:42
Así a lo bestia
00:16:47
Vale, a ver
00:16:48
Y el dragón ya se ha acabado
00:16:51
Y los otros dos pues igual
00:16:54
A ver, aquí
00:16:57
Aquí algunos habéis hecho
00:16:58
Alguna cosa un poco rara
00:17:00
A ver
00:17:01
Cuando habéis activado el poder
00:17:04
imagino que el proceso mental
00:17:06
que habéis seguido es
00:17:10
este método
00:17:11
como yo he hecho un system out solamente
00:17:13
en este caso yo he hecho un system out
00:17:15
println solamente
00:17:18
y no he tirado de las propiedades del dragón
00:17:19
pero podría haberlo hecho
00:17:21
podría haberlo hecho
00:17:22
pero bueno
00:17:23
algunos pues habéis elegido
00:17:26
una implementación de activar poder
00:17:29
que no tira de las propiedades del dragón
00:17:31
muestra un mensaje genérico
00:17:34
muestra un mensaje genérico
00:17:36
entonces en ese caso concreto
00:17:37
que es un caso concreto de todos los posibles
00:17:38
en ese caso concreto
00:17:40
pues yo entiendo que lo que ha pasado
00:17:42
es que lo habéis mirado y habéis dicho
00:17:44
uy, este método que acabo yo de escribir aquí
00:17:46
resulta que no depende
00:17:48
de las propiedades de la clase
00:17:51
eso por definición es un método estático
00:17:52
¿verdad? no depende de las propiedades
00:17:55
entonces según ese proceso mental
00:17:57
decir uy, como no depende de la clase
00:18:00
pues voy a decirlo
00:18:01
avisando con estático
00:18:05
entonces, ¿qué pasa si ponéis aquí el estático?
00:18:06
pues que ya no estáis sobrescribiendo
00:18:09
el método de arriba, estáis haciendo otro
00:18:11
porque el método de poder místico
00:18:13
no es estático, es este
00:18:15
entonces, cuando os ha salido aquí el error
00:18:16
lo que los ofrece
00:18:19
es
00:18:21
una de las cosas que os ofrece es
00:18:22
pues hace estático este
00:18:27
hace estático
00:18:29
y así los has hecho iguales
00:18:31
los he hecho iguales
00:18:34
entonces uno puede decir, vale, pues lo cambio
00:18:36
y lo hace estático
00:18:38
pero claro, por un lado
00:18:40
esta no es la solución, la solución es
00:18:42
que la criatura dragón
00:18:44
implemente ese método exactamente
00:18:46
que lo implemente, entonces
00:18:48
implementarlo significa conservar la cabecera tal cual
00:18:49
si cambiáis la cabecera
00:18:52
estáis haciendo
00:18:54
otro método, no estáis implementando ese
00:18:56
y este no se puede cambiar
00:18:58
eso por un lado, vale
00:19:00
entonces
00:19:02
Entonces, ¿qué pasa? Ahora ya parte. Si uno, ahora ya, lo siguiente que digo es, ¿en una interfaz no puede haber métodos estáticos? Sí, claro que puede haber, como a mí se me ha puesto rojo, ¿no puede haber métodos estáticos? Sí puede haber métodos estáticos en una interfaz, puede haberlos.
00:19:03
pero si los hay
00:19:22
no se pueden dejar en blanco
00:19:23
¿vale?
00:19:26
antes no se podía, pero a partir de cierta versión
00:19:28
se permitió que las interfaces incorporaran
00:19:31
métodos astáticos
00:19:32
pero que se les pusiera cuerpo
00:19:33
entonces esos métodos eran pues para hacer
00:19:35
funcionalidades igual como las variables constantes
00:19:38
que se pueden poner aquí
00:19:40
pues hay una variable constante que va a usar mucha gente
00:19:41
pues la pongo aquí en la interfaz
00:19:44
como static final y le llamo
00:19:46
con el nombre de la clase, fodermístico.patatino
00:19:48
patapín, vale, pues podría
00:19:50
ocurrir, hay alguna función
00:19:53
concreta, una función que no dependa
00:19:55
de nada, una función
00:19:57
matemática, cualquier cosa
00:19:59
que vaya a usar mucha gente
00:20:00
vale, pues se puede meter
00:20:02
en una interfaz, en un método estático
00:20:05
y los métodos estáticos
00:20:07
de las interfaces, obligatoriamente
00:20:09
tienen que tener un cuerpo
00:20:11
con lo cual este errorcito
00:20:13
rojo, solo se me va a quitar
00:20:15
si hago esto
00:20:17
pero claro, esta es una cadena de cosas
00:20:19
que habéis hecho
00:20:21
que son cambios que pierden el sentido
00:20:22
aquí, o sea, esto no es un método estático
00:20:25
con un cuerpo vacío
00:20:27
esto es un método de activar poder
00:20:28
que
00:20:30
la idea es que lo sobrescriba cada una
00:20:32
de las herederas, y cada una como le dé la gana
00:20:35
cada una como le dé la gana
00:20:37
y esa sobrescritura
00:20:39
en algunos casos puede, que no depende
00:20:40
de propiedades de la clase
00:20:43
pero en otros casos puede que sí
00:20:44
Entonces no tengo que dar por sentado
00:20:46
Que esto va a ser siempre estático
00:20:48
No tengo que darlo por sentado
00:20:49
¿Vale?
00:20:51
Bueno, pues entonces
00:20:54
Esto viene pues de esta cadena
00:20:55
De haber puesto esto aquí
00:20:58
Esto no lo puedo poner
00:20:59
Estoy implementando un método que no tiene el static
00:21:01
Pues no puedo poner el static
00:21:03
Porque entonces lo tengo que cambiar aquí
00:21:04
Y si lo cambio ya ese método ha desaparecido
00:21:07
Y esto aparte tiene un peligro
00:21:09
Si lo cambiamos y le ponemos cuerpo
00:21:13
efectivamente ya las clases que implementan
00:21:17
ya no están obligadas a sobre escribirlo
00:21:20
entonces la gran ventaja
00:21:22
de las interfaces que es
00:21:24
forzar, forzar
00:21:25
a las clases que implementan, forzar a implementar
00:21:27
un método, oye tú implementa esto
00:21:30
porque lo va a necesitar la aplicación, implementalo
00:21:31
pues ese forzado
00:21:34
lo he quitado, desde el momento en que
00:21:35
doy un cuerpo a un método, ya no forza a nadie
00:21:38
iré a mi vacío, se acabó
00:21:40
¿vale?
00:21:41
bueno entonces aprovechamos
00:21:45
aquí porque hay cosas de interfaces que no hemos contado
00:21:46
es que no da tiempo a todo, aprovechamos aquí
00:21:48
para decir que
00:21:50
las interfaces pueden tener métodos estáticos
00:21:51
pueden tenerlos, no hay problema
00:21:54
en ese caso hay que darles un contenido
00:21:55
no los puedo dejar vacíos
00:21:57
y el uso de ponernos
00:22:00
métodos estáticos ahí es meter ahí unas funcionalidades
00:22:02
pues hacer cosas concretas
00:22:04
útiles, unas utilidades
00:22:06
que a lo mejor va a usar la aplicación
00:22:07
entonces yo las meto en una interfaz
00:22:10
y las puedo llamar con el nombre de interfaz
00:22:11
podermístico.activarpoder y ya está
00:22:13
no las llamo asociadas a ningún objeto
00:22:15
entonces bueno
00:22:17
para eso pueden ser útiles esos métodos
00:22:19
para meter aquí unas funcionalidades
00:22:21
concretas para poder llamarlas desde cualquier
00:22:23
sitio con el nombre de la interfaz
00:22:25
igual que las public static
00:22:27
final variables
00:22:29
que ponemos aquí, pues constantes
00:22:31
que yo pueda a lo mejor llamar desde
00:22:33
cualquier sitio porque son útiles
00:22:35
bueno pues entonces
00:22:37
si desactivamos
00:22:40
este static de aquí pues entonces
00:22:41
esto ya
00:22:43
Lo puedo quitar
00:22:44
Y esto ya fuera
00:22:46
Ya se queda esto así
00:22:50
Bueno, pues el dragón y el resto
00:22:54
Serán parecidos, entonces voy a hacer un copia y pega
00:22:57
Y ya está
00:22:59
Dragón, este va a ser el elfo
00:23:00
Y este va a ser este
00:23:09
Entonces
00:23:18
El elfo, pues, ala
00:23:19
El color
00:23:23
No le cambio nada
00:23:25
Ya está
00:23:27
Este es el elfo y el unicornio
00:23:28
Pues lo mismo
00:23:31
Bueno
00:23:31
Cambio el mensajito y ya está
00:23:34
¡Hala! Pues ya están las
00:23:37
Ups
00:23:54
Ya están las tres clases
00:23:55
Estas de aquí
00:23:58
¿Vale?
00:24:01
Y ahora ya un array con cuatro
00:24:09
Mostrar descripción de todas
00:24:11
Y solo de... Pues ya está
00:24:14
Ahora ya hacemos un main
00:24:16
Bueno, pues array de cuatro de ellas
00:24:18
Como todas heredan
00:24:34
De criatura mística
00:24:36
Pues la raíz será de esto, obviamente
00:24:38
Una raíz de esto
00:24:40
Y ahí puede caer cualquier cosa
00:24:44
Que lo herede, cualquiera
00:24:46
Como queremos solo cuatro
00:24:47
¿Vale?
00:24:53
Uy, ala
00:24:56
Cuatro queremos, hemos dicho pues
00:25:21
Dos dragones
00:25:24
Al menos uno de cada
00:25:25
¿No? Decía
00:25:27
Al menos uno de cada
00:25:28
Pues nada, en criaturas cero
00:25:32
Pues podemos meter
00:25:42
Cualquiera de las tres
00:25:43
Ah, ya está el array
00:25:45
Y ahora, de nuevo, hay que recorrer el array
00:26:25
Hay que recorrer el array para hacer lo siguiente
00:26:30
¿Qué hay que hacer?
00:26:33
Describir cualquiera de ellas
00:26:35
Bueno, no le he puesto valores, los he dejado por defecto, por rapidez
00:26:36
Pues nada, hombre, habla que hay que recorrer el array
00:26:39
Entonces cada uno ya lo recorre como quiere
00:26:42
Como en este caso es para mostrar solo
00:26:44
Pues si uno es vago
00:26:45
Lo puede recorrer así
00:26:47
para cada criatura mística
00:26:48
que esté en mi array de criaturas
00:26:52
¿qué hago yo con cada una de ellas?
00:26:54
pues con todas ellas
00:26:58
voy a describirlo
00:26:59
entonces afortunadamente
00:27:01
como describir criatura está aquí
00:27:03
está aquí
00:27:05
aunque esté vacío, está ahí
00:27:07
lo puedo llamar
00:27:09
para el array
00:27:12
el array está declarado como criatura mística
00:27:13
entonces puedo llamar a cualquier método de criatura mística
00:27:16
lo puedo llamar desde ahí
00:27:18
vale, que ocurre
00:27:20
que luego ya a la hora de ejecutarse
00:27:22
el método que se va a ejecutar
00:27:24
es la versión que esté en cada subclase
00:27:25
esa es la versión
00:27:29
que se va a ejecutar, la de la subclase
00:27:30
pero es necesario
00:27:32
que esté aquí, ahí tiene que estar
00:27:34
sí o sí, porque si no
00:27:36
no puedo llamarlo
00:27:38
para una variable que está declarada de esta manera
00:27:39
no puedo
00:27:42
vale, y que otra cosa tenemos que hacer con
00:27:43
los bichos estos
00:27:46
Pues solo de algunos de ellos
00:27:48
Solo de algunos de ellos
00:27:52
Activar el poder
00:27:53
Solo de algunos de ellos
00:27:55
¿De cuáles?
00:27:56
De los que sean elfos
00:27:57
¿Cómo podemos saber si uno es elfo o no es elfo?
00:27:59
Pues solo tenemos una manera
00:28:02
Si esta criatura
00:28:03
Se instanció
00:28:05
Como elfo
00:28:07
Solo en ese caso
00:28:10
Pues ya está
00:28:11
Y no necesito hacer un casting
00:28:15
A elfo ni nada
00:28:22
Porque activar poder
00:28:23
activar poder
00:28:24
está en criatura mística
00:28:26
a través de poder místico
00:28:28
está ahí, no necesito hacer ningún casting ni nada
00:28:30
vale, entonces si yo ejecuto eso
00:28:32
bueno, me van a salir los valores por defecto
00:28:37
que son null para los nombres y todo eso
00:28:39
pero bueno, es lo de menos
00:28:41
esta es
00:28:43
la descripción del dragón
00:28:55
esta es la descripción del elfo
00:28:57
este es el poder del elfo
00:28:59
la descripción del unicornio
00:29:00
y la descripción del dragón, otra vez
00:29:03
Como no le he puesto valores en las propiedades
00:29:05
Pues son valores por defecto, pero
00:29:08
Nos da igual
00:29:09
Vale, pues ya está
00:29:10
Pues este
00:29:13
Si no me he equivocado
00:29:15
Es esto de aquí
00:29:16
¿Vale? Bueno
00:29:18
¿Ninguna pregunta de este ejercicio?
00:29:26
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 10
- Fecha:
- 3 de abril de 2024 - 18:40
- Visibilidad:
- Público
- Centro:
- IES ROSA CHACEL
- Duración:
- 29′ 32″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 136.41 MBytes