Las clases abstractas son una característica importante de la programación orientada a objetos en Java. Una clase abstracta es una clase que no se puede instanciar directamente y se utiliza como base para otras clases. Una clase abstracta puede tener métodos abstractos, que son métodos que no tienen una implementación y deben ser implementados por las clases que heredan de la clase abstracta.
Vídeo explicativo
Una de las principales razones por las que se utilizan las clases abstractas es la de proporcionar una estructura común para las clases que heredan de ella. Por ejemplo, si tenemos una clase abstracta “FiguraGeométrica” con métodos abstractos para calcular el área y el perímetro de una figura, podemos tener clases concretas como “Círculo” y “Cuadrado” que heredan de “FiguraGeométrica” y proporcionan implementaciones específicas para calcular el área y el perímetro.
Además de los métodos abstractos, las clases abstractas también pueden tener métodos concretos, que son métodos que tienen una implementación. Estos métodos pueden ser utilizados directamente por las clases que heredan de la clase abstracta sin necesidad de implementar nuevamente el método.
Clase abstracta
Una clase abstracta es una clase que no se puede instanciar directamente y se utiliza como base para otras clases. Una clase abstracta puede tener métodos abstractos, que son métodos que no tienen una implementación y deben ser implementados por las clases que heredan de la clase abstracta. Además de los métodos abstractos, las clases abstractas también pueden tener métodos concretos, que son métodos que tienen una implementación.
Por ejemplo, podemos tener una clase abstracta llamada “Animal” con un método abstracto llamado “hacerRuido()“. Luego, podemos tener clases concretas como “Perro” y “Gato” que heredan de la clase “Animal” y proporcionan implementaciones específicas para el método “hacerRuido()“.
abstract class Animal {
// Método abstracto
public abstract void hacerRuido();
// Método concreto
public void dormir() {
System.out.println("El animal está durmiendo.");
}
}
A lo que nosotros podríamos usar la clase abstracta para crear clases hijas de nuestra clase abstracta Animal, en este caso Perro y Gato:
class Perro extends Animal {
// Implementación del método abstracto hacerRuido()
public void hacerRuido() {
System.out.println("Guau!");
}
}
class Gato extends Animal {
// Implementación del método abstracto hacerRuido()
public void hacerRuido() {
System.out.println("Miau!");
}
}
En este ejemplo, tenemos una clase abstracta “Animal” con un método abstracto “hacerRuido()” y un método concreto “dormir()“. Luego tenemos dos clases concretas “Perro” y “Gato” que heredan de “Animal” y proporcionan implementaciones específicas para el método “hacerRuido()“.
Tenga en cuenta que no podemos instanciar la clase “Animal” directamente, ya que es una clase abstracta. En su lugar, debemos utilizar una de las clases concretas que heredan de “Animal“, como “Perro” o “Gato“.
Animal perro = new Perro();
perro.hacerRuido(); // Imprime "Guau!"
perro.dormir(); // Imprime "El animal está durmiendo."
Animal gato = new Gato();
gato.hacerRuido(); // Imprime "Miau!"
gato.dormir(); // Imprime "El animal está durmiendo."
Método abstracto
Un método abstracto es un método que no tiene una implementación y que debe ser implementado por las clases que heredan de la clase que lo contiene. Los métodos abstractos deben ser declarados en clases abstractas y deben ser implementados por las clases que heredan de la clase abstracta.
abstract class Animal {
// Método abstracto
public abstract void hacerRuido();
}