La palabra clave abstract
en Java es un modificador que se puede aplicar a clases y métodos. En el contexto de una clase, el uso de la palabra clave abstract
indica que la clase no puede ser instanciada directamente. En otras palabras, no puedes crear un objeto de una clase abstract
. Esta existe principalmente para ser extendida (heredada) por otras clases.
Por ejemplo, considera una clase abstracta Animal. Esta clase podría tener un método abstracto hacerSonido()
.
public abstract class Animal {
public abstract void hacerSonido();
}
Nosotros no sabemos cómo hace sonido un animal genérico, pero sabemos que todos los animales hacen sonido. Así que es lógico declarar este método en la clase base Animal, pero no tiene sentido implementarlo.
Cualquier clase que herede de Animal necesitará proporcionar una implementación para el método hacerSonido()
.
public class Perro extends Animal {
public void hacerSonido() {
System.out.println("El perro hace: guau guau");
}
}
En este ejemplo, la clase Perro
proporciona una implementación concreta del método abstracto hacerSonido()
.
Una de las mejores prácticas a la hora de usar la palabra clave abstract
es utilizarla para expresar la intención de diseño y representar conceptos abstractos. Por ejemplo, podría tener las clases abstractas Vehículo
, Animal
o Forma
, que representan conceptos generales que pueden ser concretados en subclases como Carro
, Perro
o Circulo
, respectivamente.
Las clases abstractas proporcionan una forma de definir contratos (es decir, los métodos que deben ser implementados por cualquier subclase) y también pueden contener alguna lógica de implementación. Sin embargo, como no pueden ser instanciadas, debes asegurarte de que tenga sentido para ellas ser clases base, y no clases que necesitarías instanciar.
En conclusión, la palabra clave abstract
proporciona una poderosa forma de abstracción en Java y es esencial para muchos patrones de diseño orientados a objetos.