abstract es un modificador de no acceso en java aplicable para clases, métodos pero no variables. Se utiliza para lograr la abstracción, que es uno de los pilares de la Programación Orientada a Objetos (POO). Los siguientes son diferentes contextos donde se puede usar abstracto en Java.
La clase que tiene implementación parcial (es decir, no todos los métodos presentes en la clase tienen definición de método). Para declarar una clase abstracta, use esta forma general:
abstract class class-name{ //body of class }
Debido a su implementación parcial, no podemos instanciar clases abstractas. Cualquier subclase de una clase abstracta debe implementar todos los métodos abstractos en la superclase o debe declararse abstracta. Algunas de las clases predefinidas en Java son abstractas. Dependen de sus subclases para proporcionar una implementación completa. Por ejemplo, java.lang.Number es una clase abstracta. Para obtener más información sobre clases abstractas, consulte clases abstractas en Java .
Métodos abstractos
A veces, solo requerimos la declaración del método en las 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 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 with class abstract class A { // abstract with 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 superclase. Por lo tanto, debe ser posible crear una referencia a una clase abstracta para que pueda usarse para apuntar a un objeto de subclase.
resumen y final
En java, nunca verá una clase o método declarado con palabras clave tanto finales como abstractas. Para las clases, final se usa para evitar la herencia , mientras que las clases abstractas dependen de sus clases secundarias para una implementación completa. En los casos de métodos, final se usa para evitar la anulación , mientras que los métodos abstractos deben anularse en las subclases.
Este artículo es una contribución de Gaurav Miglani . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA