viernes, 1 de mayo de 2020

Clases y métodos abstractos

Método abstracto

Java nos permite definir un método sin implementarlo declarando el método con el modificador abstracto. Un método abstracto no tiene cuerpo; simplemente tiene una definición de firma seguida de un punto y coma.

// Ejemplo de método abstracto
public abstract String saludo();


Clase abstracta

Una clase abstracta es aquella cuya implementación es incompleta y no puede ser instanciada. Cualquier clase con uno o más métodos abstractos debe declararse abstracta.

// Ejemplo de clase abstracta

public abstract class SerVivo{
   //Atributos

   //Métodos

}


Consideraciones

  • Cualquier clase con un método abstracto se abstrae automáticamente y debe declararse como tal.
  • La clase abstracta no puede ser instanciada.
  • Una subclase de una clase abstracta se puede instanciar solo si invoca a cada uno de los métodos abstractos de su superclase y proporciona una implementación para todos ellos. Dicha clase a menudo se denomina subclase concreta, para enfatizar el hecho de que no es abstracta.
  • Si una subclase de una clase abstracta no implementa todos los métodos abstractos que hereda, esa subclase es en sí misma abstracta.
  • Los métodos estáticos, privados y finales no pueden ser abstractos, ya que estos tipos de métodos no pueden ser anulados por una subclase. Del mismo modo, una clase final no puede contener ningún método abstracto.
  • Una clase puede declararse abstracta incluso si en realidad no tiene ningún método abstracto. Declarar dicho resumen de clase indica que la implementación está de alguna manera incompleta y está destinada a servir como una superclase para una o más subclases que completarán la implementación. Tal clase no puede ser instanciada.


Ejemplo en código

Se creó dos clases, una abstracta llamada "Figura" y otra común llamada "Cuadrado", la primera tiene dos métodos abstractos y es la superclase de la segunda, esto implica que los dos métodos se deben implementar en la clase hija o subclase.
  1. package entidades;
  2. public abstract class Figura {
  3. public abstract Double area();
  4. public abstract Double perimetro();
  5. }


  1. package entidades;
  2. public class Cuadrado extends Figura{
  3. private Double lado;
  4. public Cuadrado(Double lado) {
  5. super();
  6. this.lado = lado;
  7. }
  8. @Override
  9. public Double area() {
  10. return Math.pow(lado, 2);
  11. }
  12. @Override
  13. public Double perimetro() {
  14. return 4*lado;
  15. }
  16. public Double getLado() {
  17. return lado;
  18. }
  19. public void setLado(Double lado) {
  20. this.lado = lado;
  21. }
  22. }

  1. package test;
  2. import entidades.Cuadrado;
  3. public class Ejecutor {
  4. public static void main(String[] args) {
  5. Cuadrado cuadrado = new Cuadrado(3d);
  6. System.out.println("Medida del lado: " + cuadrado.getLado().toString());
  7. System.out.println("Área: " + cuadrado.area().toString());
  8. System.out.println("Perímetro: " + cuadrado.perimetro().toString());
  9. }
  10. }

Salida:

Medida del lado: 3.0
Área: 9.0
Perímetro: 12.0

Esquema del proyecto:



Fuentes:

  • Flanagan, D. (2002). JAVA IN A NUTSHELL Desktop Quick Reference (4a ed.). England: Pearson Education.


No hay comentarios:

Publicar un comentario