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 se puede extender. Por lo tanto, las clases abstractas solo tienen sentido si el lenguaje de programación admite la herencia.
Las clases abstractas actúan como clases primarias de las cuales se derivan las clases secundarias, de modo que la clase secundaria compartirá las características incompletas de la clase primaria y se puede agregar funcionalidad para completarlas.
La herencia es un concepto orientado a objetos que permite que nuevas clases amplíen otras clases. 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.
Las clases abstractas generalmente representan un concepto abstracto o una entidad con implementación parcial o nula. Como las clases abstractas no se pueden instanciar, debe usar el concepto de herencia para utilizar 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.