Una clase abstracta es una clase de la que no se puede crear una instancia utilizando el nuevo método, es decir, una clase que no tiene un objeto de instancia concreto. Las clases abstractas son, en cierto modo, "plantillas" para crear y modificar nuevas clases según su formato. Los objetos no se pueden crear directamente a partir de una clase abstracta, solo derivando una nueva subclase de la clase abstracta y luego creando objetos a partir de la subclase. Cuando una clase se declara abstracta, va precedida por el modificador abstract. Los métodos miembros de clases abstractas pueden incluir métodos generales y métodos abstractos. Un método abstracto es un método modificado por abstracto. Solo declara el tipo de datos devuelto, el nombre del método y los parámetros requeridos. No hay cuerpo del método, lo que significa que el método abstracto solo necesita declararse y no necesita implementarse. Cuando un método es un método abstracto, significa que el método debe ser anulado por el método de su subclase; de lo contrario, el método de su subclase sigue siendo abstracto y la subclase también debe ser abstracta, es decir, declarada como un método abstracto. Una clase abstracta no necesariamente contiene métodos abstractos, pero una clase que contiene métodos abstractos debe declararse como una clase abstracta. Las clases abstractas no tienen ninguna funcionalidad real y sólo pueden usarse para derivar subclases. Una clase abstracta puede contener constructores, pero los constructores no pueden declararse como métodos abstractos. Las clases abstractas no pueden ser modificadas por clases finales, es decir, una clase no puede ser al mismo tiempo una clase final y una clase abstracta. Una clase abstracta no puede modificar el mismo método que una clase privada, estática, final o local. Ejemplo de programa: clase abstracta Animal //definir clase abstracta
{
String Animal(String s) //Método general para definir clase abstracta
{ str=s; } abstract void eat(); //definir método abstracto}class Horse extends Animal //definir subclase que hereda de Animal
{ String Horse(String s)
{ super(s); //llamar al método constructor de la clase principal }void eat() //Anular el método abstracto de la clase principal
{ System.println("¡Forraje para comer caballos!" ) }}clase Perro extiende Animal
{ String str; Perro(String s)
{ super(s } void eat()
{ System .out.println("¡El perro come huesos!"); }} prueba de clase
{ public static void main(String args[])
{ Caballo Caballo1 = nuevo Caballo( " Caballo"); Perro1 = new Perro("Perro"); Caballo1.comer(); Caballo1.comer(); ) ; Horse1.eat(); Dog1.eat(); Horse1.eat(); Horse1.eat()); Resultados de la ejecución: ¡Los caballos comen hierba y los perros comen huesos!