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.
package entidades;

public abstract class Figura {
 
 public abstract Double area();
 public abstract Double perimetro();

}


package entidades;

public class Cuadrado extends Figura{
 private Double lado;
 
 public Cuadrado(Double lado) {
  super();
  this.lado = lado;
 }

 @Override
 public Double area() {
  return Math.pow(lado, 2);
 }

 @Override
 public Double perimetro() {  
  return 4*lado;
 }

 public Double getLado() {
  return lado;
 }

 public void setLado(Double lado) {
  this.lado = lado;
 } 
 
}

package test;

import entidades.Cuadrado;

public class Ejecutor {
 public static void main(String[] args) {
  Cuadrado cuadrado = new Cuadrado(3d);
  System.out.println("Medida del lado: " + cuadrado.getLado().toString());
  System.out.println("Área: " + cuadrado.area().toString());
  System.out.println("Perímetro: " + cuadrado.perimetro().toString());
 }
}

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