Hola bienvenidos a esta elección.
A continuación van a estudiar el tema de clases abstractas en Java.
Están listos.
Vamos en este ejercicio vamos a poner en práctica el siguiente diagrama de clases por un lado vamos
a crear el paquete abstracto punto Domaine y dentro de este paquete vamos a deposité a las siguientes
clases.
Vamos a crear una primera clase de tipo abstracta llamada figura geométrica y por otro lado vamos a
crear algunas clases hijas.
La clase de triángulo que es una subclase de la clase abstracta posteriormente la clase rectángulo y
finalmente la clase de círculo
y por otro lado vamos a crear otro paquete.
Ejemplo clases abstractas con la clase llamada ejemplo clases abstractas en la cual vamos a poner a
prueba a cada una de estas clases que hemos agregado en el paquete abstracto Domain.
Así que vamos a poner en práctica este diagrama de clases bien como primer paso vamos a abrir nuestro
IDE cerramos cualquier proyecto que tengamos abierto en su derecho Kloss damos siguen Feil ni un proyecto
para crear nuestro nuevo proyecto seleccionamos llevá with Maybe y posteriormente Java Application.
Damos clic en Next y el nombre del proyecto se va a llamar
ejemplo creeís abstractas y lo depositamos en la ruta desde dos puntos.
Diagonal inversa cursos diagonal inversa Java el grupo Iribas RMX con G.M. globalmente en la versión
1.0 y dejamos el nombre del paquete vacío y damos fuguen finalizar bien ahora como siguiente paso vamos
a comenzar con nuestra clase abstracta sobre nuestro proyecto damos clic derecho neo Java class el nombre
de la clase va a ser figura geométrica y el nombre del paquete va a ser abstracto.
Punto Domaine y damos clic en Finalizar quitamos estos comentarios para poder definir esta clase como
abstracta.
Vamos a agregar este modificador de acceso Public abstract y posteriormente la palabra reservada Class
y el nombre de nuestra clase así que simplemente es un modificador de acceso más pero esto es lo que
implica es que no vamos a poder crear objetos de esta clase.
Esto significa el concepto de abstracto no podemos crear instancias de esta clase de figuras geométricas.
Para ello es que vamos a definir clases hijas de esta clase figura geométrica bien de momento vamos
a dejar hasta aquí este código y vamos a continuar agregando las demás clases posteriormente dentro
de este mismo paquete vamos a agregar otra clase damos de Derecho Neon Java class la clase se llama
círculo y la depositamos en el mismo paquete de abstracto a punto Domain quitamos estos comentarios
y esta clase de círculo va a extender la clase padre figura geométrica extensión
figura geométrica bien ahora creamos nuestra siguiente clase de la clase de triángulo damos clic derecho
Nioh Java class
triángulo y damos clic en Finalizar de igual manera.
Esta clase se va a extender de la clase padre abstracta figura geométrica.
Figura geométrica y finalmente agregamos la clase de rectángulo un Class rectángulo en finalizar quitamos
estos comentarios y hacemos extensos
de la clase figura geométrica bien vamos a comenzar con el código de nuestras clases.
En este ejemplo que estamos realizando la clase figura geométrica.
Realmente no sabemos de qué tipo es por lo tanto necesitamos de clases hijas como la clase de círculo
triángulo rectángulo para saber qué tipo de figura geométrica es por lo tanto la clase figura geométrica
la vamos a definir como abstracta es decir que no la podemos utilizar directamente pero las clases fijas
son las que van a definir qué tipo de figura geométrica es la que se va a utilizar así que vamos a agregar
un atributo que se va a heredar a las clásicas por lo tanto lo vamos a definir como un protegido de
tipo string llamado tipo figura ya que solamente las clases hijas pueden saber de qué tipo de figura
son posteriormente definimos también un constructor protegido
el cual va inicializar el atributo de figura geométrica
y utilizamos el argumento
para inicializar el atributo de figura geométrica aquí podemos utilizar el mismo nombre tipo figura
tipo figura bien conocida tenemos el constructor de nuestra clase el cual también se va a heredar a
las clases hijas y vamos a agregar ahora un método que también va a ser abstracto públic para definir
un método abstracto utilizamos la palabra reservada abstract posteriormente indicamos el tipo de regreso
en este caso no va a regresar nada.
El método se va a llamar dibujar pero debido a que es un método abstracto no contiene el cuerpo del
método así que los métodos abstractos no incluyen ningún código.
Por lo tanto terminan simplemente con punto y coma y las clases fijas son las que se van a encargar
de sobreescribir el comportamiento del método abstracto definido en la clase padre
así que agregamos el comentario la clase padre no define el comportamiento sino que las clases hijas
se van a encargar de definir este comportamiento posiblemente agregamos los métodos jet set para el
atributo de tipo figura damos un derecho Alcott generamos los métodos jet set para el atributo tipo
figura y finalmente agregamos el método string insert Coupet string y damos clic en generar
y con esto ya estamos definiendo todo el código de nuestra clase figura geométrica de la cual no vamos
a poder crear objetos y el método dibujar lo hemos definido como abstracto así que las clases fijas
son las que se van a encargar de agregar el comportamiento de este método dibujar bien ahora vamos a
comenzar con nuestra clase de Círculo de entrada ya nos está marcando un error debido a que la clase
círculo como extiende la clase figura geométrica debe de implementar el comportamiento del método dibujar
así que a diferencia de la sobre escritura en la cual es opcional sobrescribir métodos de la clase padre
en este caso estamos obligados a agregar el comportamiento de los métodos abstractos de la clase padre
si no agregamos el comportamiento del método abstracto entonces esta misma clase para que no marque
ese error también tendríamos que marcarla como abstracta
pero ahora nos marca el detalle de que debemos utilizar el constructor con un argumento de la clase
padre ya que como hemos definido el constructor con un argumento entonces el constructor vació ya no
lo agrega de manera automática el compilador así que en este caso tendríamos que utilizar el constructor
de un argumento de la clase padre bien así que con esa explicación esta clase no la vamos a definir
como abstracta sino que va a implementar el método abstracto de la clase padre bien así que vamos a
agregar el siguiente código.
Definimos un constructor recibimos un argumento el argumento de tipo figura y con ese argumento vamos
a inicializar el constructor de la clase padre así que mandamos a llamar súper y le pasamos el valor
de tipo figura para poder inicializar correctamente.
El constructor de la clase padre y posteriormente vamos a definir el comportamiento abstracto del método
dibujar en esta clase ya no va a ser método abstracto sino que ya debemos agregar el comportamiento
que deseamos en esta clase
así que agregamos el comportamiento del método abstracto y agregamos el siguiente comentario
aquí debería dibujar y concatenados el nombre de la clase la misma clase nos dice qué tipo de figura
geométrica se debería de dibujar así que vamos a obtener el nombre de la clase.
Para ello vamos a utilizar el siguiente código.
Utilizamos el operador dis.
Posteriormente solicitamos el nombre de la clase y finalmente solicitamos el nombre simple de la clase
para que se imprima el nombre de círculo así que con este código podemos obtener el nombre de la clase
y ese es todo el código que va a tener esta clase de círculo.
Con esto podemos observar que el compilador ya no marca ningún problema ya que ya estamos agregando
la implementación del método dibujar de la clase padre.
En este caso este concepto no se conoce como sobre escritura aunque podría parecer que sobra escritura.
Recordemos que la sobre escritura realmente modifica el comportamiento definido en la clase padre y
en este caso como la clase padre no ha agregado ningún comportamiento.
Entonces la clase e hija no está escribiendo el comportamiento no está modificando el comportamiento
de la clase padre sino que lo está definiendo por primera vez.
Sin embargo para el compilador de manera opcional se puede agregar la notación de overnight
sin embargo por ello ya hemos explicado que esto no es una escritura y podemos observar incluso que
el comentario que nos muestra el IDE no es una o dos Berit sino es una ahí y eso significa que está
implementando el método abstracto de la clase padre figura geométrica.
Así que esas son las diferencias de la escritura en este caso no es sobre escritura debido a que no
estamos modificando el comportamiento de la clase padre sino que estamos implementando el comportamiento
del método abstracto dibujar de la clase padre
y vamos a hacer lo mismo con las demás clases
podemos apoyarnos de este código en la clase de triángulo vamos a hacer exactamente lo mismo pero definimos
el constructor de triángulo el método dibujar con esto obtenemos de manera dinámica el nombre de nuestra
clase.
Por lo tanto debería de imprimir el valor de triángulo y hacemos lo mismo para la clase de rectángulo
es exactamente el mismo código y el método dibujar ya se está implementando aquí debería dibujar y al
obtener el nombre de la clase va a imprimir el nombre de rectángulo y en cada uno de los casos la clase
triángulo está implementando el método dibujar de la clase padre y también en esta clase de rectángulo.
Implementamos el método dibujar de la clase padre figura geométrica bien ahora por último vamos a crear
nuestra clase de prueba
sobre nuestro proyecto damos el derecho a la clase la clase se llama ejemplo clases abstractas y el
nombre del paquete va a ser ejemplo clases abstractas y damos clic en Finalizar
vamos a agregar un método main Public está tipo y Main y vamos a crear los objetos que vamos a poner
a prueba en primer lugar si deseamos crear un objeto de la clase figura geométrica.
Vamos a observar el siguiente resultado
importamos esta clase y cómo vamos a utilizar varias clases de este paquete ponemos punto asterisco
y podemos ver que el compilador nos manda un error nos indica figura geométrica.
Es una clase abstracta por lo tanto no puede ser instancia dada así que una clase abstracta no podemos
crear objetos de esta clase vamos a poner entre comentarios esta línea para que podamos continuar.
Y ahora vamos a definir un objeto de tipo rectángulo.
Pero lo interesante aquí es que esta referencia como hemos hecho en elecciones anteriores cuando vimos
el tema de polimorfismo o la clase de sobre escritura podemos utilizar un tipo de la clase padre para
almacenar referencias de clases hijas.
Así que vamos a definir un tipo de la clase padre la variable se llama rectángulo pero va a apuntar
a un objeto de la clase hija en este caso a un objeto de tipo rectángulo y proporcionamos el tipo de
figura que se va a utilizar y con eso estamos creando un objeto de la clase hija y lo estamos asignando
a una variable llamada rectángulo de tipo padre mandamos a imprimir este objeto guardamos cambios y
ejecutamos
y podemos observar que el método string lo que está haciendo es mandar a imprimir el valor de tipo de
figura en este caso la figura geométrica que se está imprimiendo contiene el valor de rectángulo según
el valor que hemos proporcionado al momento de crear este objeto y ahora vamos a mandar a llamar el
método dibujar con ayuda de la variable rectángulo.
Mandamos a llamar el método dibujar guardamos cambios y ejecutamos y podemos ver el resultado aquí debería
dibujar y nos imprime el nombre del rectángulo
un detalle también aquí en el método dibujar es que en otros casos hemos mandado llamar el método de
la clase padre utilizando súper así que vamos a comprobar que esto es diferente si tratamos de utilizar
súper y posteriormente mandar a llamar el método dibujar podemos observar que el compilador nos está
indicando que el método dibujar de la clase padre es un método abstracto por lo tanto nos está indicando
que no se puede acceder de manera directa así que con esto también estamos comprobando que no es una
escritura ya que no se está ocultando ningún método sino que en este caso es la primera vez que estamos
implementando este método así que esta línea de código no funciona.
En este caso así que con eso estamos configurando ya correctamente una clase abstracta le hemos asignado
una referencia de un objeto de la clase e hija y finalmente implementamos correctamente el método dibujar
desde la clase e hija y vamos a comprobar las demás clases simplemente para ver que todo funciona sin
ningún problema pero es exactamente el mismo código y la misma estructura que hemos manejado hasta el
momento así que definimos una variable de tipo padre en este caso se llama triángulo
creamos un objeto
de tipo triángulo imprimimos el contenido de este objeto se manda a llamar el método autodestruyen
y finalmente mandamos a llamar el método dibujar de la clase triángulo guardamos cambios y ejecutamos
y podemos observar que en este segundo caso nos manda el mensaje de dibujar y en este caso deberá dibujar
un triángulo así que todo funciona sin ningún problema se ha implementado correctamente este código
y por último ponemos a prueba el círculo
mandamos a imprimir el objeto de círculo y posteriormente mandamos a llamar el método dibujar del objeto
de círculo.
Guardamos cambios y ejecutamos y podemos ver también el mensaje figura geométrica es un círculo y aquí
debería dibujar un círculo así que con esto hemos puesto en práctica el concepto de clases abstractas
en la cual no podemos crear instancias de esta clase.
Pero para ello es que le agregamos clases hijas en la cual podemos ya crear instancias de las clases
hijas pero además estas clases clásicas se deben de encargar de implementar el comportamiento de los
métodos abstractos definidos en las clases padre
bien en esta lección y nos vemos en el siguiente video.
Saludos.