A veces, solo requerimos la declaración de métodos en superclases. Esto se puede lograr especificando el modificador de tipo abstracto . Estos métodos a veces se denominan responsabilidad del subclase porque no tienen una implementación especificada en la superclase. Por lo tanto, una subclase debe anularlos para proporcionar una definición de método. Para declarar un método abstracto, utilice esta forma general:
abstract type method-name(parameter-list);
Como puede ver, no hay ningún cuerpo de método presente. Cualquier clase concreta (es decir, clase sin palabra clave abstracta) que amplíe una clase abstracta debe anular todos los métodos abstractos de la clase.
Reglas importantes para los métodos abstractos:
- Cualquier clase que contenga uno o más métodos abstractos también debe declararse abstracta.
- Las siguientes son varias combinaciones ilegales de otros modificadores para métodos con respecto al modificador abstracto :
- final
- nativo abstracto
- abstracto sincronizado
- estática abstracta
- abstracto privado
- Resumen estricto
Considere el siguiente programa Java, que ilustra el uso de palabras clave abstractas con clases y métodos.
Java
// A java program to demonstrate // use of abstract keyword. // abstract class abstract class A { // abstract method // it has no body abstract void m1(); // concrete methods are still // allowed in abstract classes void m2() { System.out.println("This is " + "a concrete method."); } } // concrete class B class B extends A { // class B must override m1() method // otherwise, compile-time // exception will be thrown void m1() { System.out.println("B's " + "implementation of m1."); } } // Driver class public class AbstractDemo { public static void main(String args[]) { B b = new B(); b.m1(); b.m2(); } }
Producción:
B's implementation of m1. This is a concrete method.
Nota: aunque las clases abstractas no se pueden usar para crear instancias de objetos, se pueden usar para crear referencias a objetos, porque el enfoque de Java para el polimorfismo en tiempo de ejecución se implementa mediante el uso de referencias de superclases. Por lo tanto, debe ser posible crear una referencia a una clase abstracta para que pueda usarse para apuntar a un objeto de subclase.