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 las nuevas clases amplíen otras clases. La clase abstracta es una clase que no se puede inicializar pero se puede extender. Por lo tanto, las clases abstractas solo tienen significado si el lenguaje de programación admite la herencia. En Java, las clases Abstractas se declaran usando la palabra clave Abstract, mientras que la palabra clave Extends se usa para heredar de una (super) clase.
Que es clase abstracta?
Normalmente, las clases abstractas, también conocidas como clases base abstractas (ABC), no se pueden crear instancias (no se puede crear una instancia de esa clase). Por lo tanto, las clases abstractas solo tienen significado si el lenguaje de programación admite la herencia (capacidad para crear subclases a partir de la extensión de una clase). Las clases abstractas generalmente representan un concepto abstracto o entidad con implementación parcial o nula. Por lo tanto, las clases abstractas actúan como clases primarias 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 pueden 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 lo hace, la clase infantil también se convierte en una clase abstracta. Lo que todo esto significa es que, cuando el programador designa una clase como Resumen, está diciendo que la clase estará incompleta y tendrá elementos que las subclases hereditarias deben completar. 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 el código para heredar, necesita seguir exactamente las definiciones de los métodos (pero, por supuesto, puede tener su propia implementación).
¿Qué es la herencia??
La herencia es un concepto orientado a objetos, que permite a las nuevas clases extender otras clases. Extiende la palabra clave 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 primaria), 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) heredada de la clase principal. Normalmente, una subclase no puede extender varias súper clases (por ejemplo, en Java). Por lo tanto, no puede usar extensiones para herencia múltiple. Para tener herencia múltiple, necesitas usar interfaces.
¿Cuál es la diferencia entre la clase abstracta y la 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, las clases abstractas no se pueden crear instancias, 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, entonces 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 en sí, sino una restricción de herencia).