Clase abstracta vs herencia
La clase abstracta y la herencia son dos conceptos importantes orientados a objetos que se encuentran en muchos lenguajes de programación orientados a objetos como Java. La clase abstracta se puede considerar como una versión abstracta de una clase regular (concreta), mientras que la herencia permite que nuevas clases amplíen otras clases. La clase abstracta es una clase que no se puede inicializar pero que se puede ampliar. Por lo tanto, las clases abstractas solo son significativas si el lenguaje de programación admite la herencia. En Java, las clases abstractas se declaran utilizando la palabra clave Abstract, mientras que la palabra clave Extends se utiliza para heredar de una (super) clase.
¿Qué es la clase abstracta?
Normalmente, las clases abstractas, también conocidas como clases base abstractas (ABC), no se pueden instanciar (no se puede crear una instancia de esa clase). Por lo tanto, las clases abstractas solo son significativas si el lenguaje de programación admite la herencia (capacidad de crear subclases a partir de la extensión de una clase). Las clases abstractas generalmente representan un concepto o entidad abstracta con implementación parcial o nula. Por lo tanto, las clases abstractas actúan como clases principales de las que se derivan las clases secundarias, de modo que la clase secundaria compartirá las características incompletas de la clase principal y se podrán agregar funciones para completarlas.
Las clases abstractas pueden contener métodos abstractos. Las subclases que extienden una clase abstracta pueden implementar estos métodos abstractos (heredados). Si la clase secundaria implementa todos estos métodos abstractos, es una clase concreta. Pero si no es así, la clase secundaria también se convierte en una clase abstracta. Lo que todo esto significa es que, cuando el programador nomina una clase como Resumen, está diciendo que la clase estará incompleta y tendrá elementos que deben ser completados por las subclases heredadas. Esta es una buena forma de crear un contrato entre dos programadores, lo que simplifica las tareas en el desarrollo de software. El programador, que escribe código para heredar, debe seguir exactamente las definiciones del método (pero, por supuesto, puede tener su propia implementación).
¿Qué es la herencia?
La herencia es un concepto orientado a objetos, que permite que nuevas clases amplíen otras clases. La palabra clave Extends se utiliza para implementar el concepto de herencia en el lenguaje de programación Java. La herencia esencialmente proporciona la reutilización del código al permitir extender las propiedades y el comportamiento de una clase existente por una clase recién definida. Cuando una nueva subclase (o clase derivada) extiende una superclase (o clase padre) esa subclase heredará todos los atributos y métodos de la superclase. La subclase puede anular opcionalmente el comportamiento (proporcionar funcionalidad nueva o extendida a los métodos) heredado de la clase principal. Normalmente, una subclase no puede extender varias superclases (por ejemplo, en Java). Por lo tanto, no puede utilizar extensiones para herencia múltiple. Para tener herencia múltiple, necesita usar interfaces.
¿Cuál es la diferencia entre clase abstracta y herencia?
Las clases abstractas generalmente representan un concepto abstracto o una entidad con implementación parcial o nula. La herencia permite que las nuevas clases amplíen otras clases. Debido a que no se pueden crear instancias de clases abstractas, es necesario utilizar el concepto de herencia para hacer uso de las clases abstractas. De lo contrario, una clase abstracta no tiene uso. Las clases abstractas pueden contener métodos abstractos y cuando la clase se extiende, todos los métodos (abstractos y concretos) se heredan. La clase heredada puede implementar cualquiera o todos los métodos. Si no se implementan todos los métodos abstractos, esa clase también se convierte en una clase abstracta. Una clase no puede heredar de más de una clase abstracta (esta no es una cualidad de las clases abstractas per se, sino más bien una restricción de la herencia).