clases abstractas son clases que contienen uno o más abstractas métodos. Un método abstracto es un método que se declara, pero no contiene ninguna implementación. Las clases abstractas no se pueden crear instancias y requieren subclases para proporcionar implementaciones para los métodos abstractos. Veamos un ejemplo de una clase abstracta y un método abstracto.
Supongamos que estamos modelando el comportamiento de los animales, al crear una jerarquía de clase que comenzó con una clase base llamada Animal. Los animales son capaces de hacer cosas diferentes, como volar, cavar y caminar, pero hay algunas operaciones comunes, así como comer y dormir. Algunas operaciones comunes son realizadas por todos los animales, pero de una manera diferente también. Cuando se realiza una operación de una manera diferente, es un buen candidato para un método abstracto (obligando a las subclases a proporcionar una implementación personalizada). Miremos una clase base Animal muy primitiva, que define un método abstracto para hacer un sonido (como el ladrido de un perro, el mugido de una vaca o el oinking de un cerdo).
public abstract class Animal
{
public void eat(Food food)
{
// do something with food....
}
public void sleep(int hours)
{
try
{
// 1000 milliseconds * 60 seconds * 60 minutes * hours
Thread.sleep (1000 * 60 * 60 * hours);
}
catch (InterruptedException ie) { /* ignore */ }
}
public abstract void makeNoise();
}
Tenga en cuenta que la palabra clave abstracta se utiliza para indicar tanto un método abstracto como una clase abstracta. Ahora, cualquier animal que quiera ser instanciado (como un perro o una vaca) debe implementar el método makeNoise; de lo contrario, es imposible crear una instancia de esa clase. Veamos una subclase de Perro y Vaca que extiende la clase de Animal.
public Dog extends Animal
{
public void makeNoise() { System.out.println ("Bark! Bark!"); }
}
public Cow extends Animal
{
public void makeNoise() { System.out.println ("Moo! Moo!"); }
}
Ahora usted puede preguntarse por qué no declarar una clase abstracta como una interfaz, y tener el perro y la vaca implementa la interfaz. Claro que podrías, pero también necesitarías implementar los métodos de comer y dormir. Al usar clases abstractas, puede heredar la implementación de otros métodos (no abstractos). No puede hacer eso con las interfaces: una interfaz no puede proporcionar implementaciones de métodos.
Diría que su ejemplo apunta más al uso de una interfaz que a un resumen. Es uno de los ejemplos típicos para mostrar el uso de una interfaz: se pueden dibujar diferentes formas (cuadrado, círculo, etc.). – PeterMmm