La mayoría de los lenguajes populares de programación orientados a objetos modernos como Java están basados en clases. Alcanzan los conceptos orientados a objetos, como la encapsulación, la herencia y el polimorfismo mediante el uso de clases. Una clase abstracta se puede considerar como una versión limitada de una clase regular (concreta), donde puede contener métodos implementados parcialmente. Por lo general, las clases concretas se denominan (solo) clases.
La clase predeterminada es una clase concreta. La palabra clave class se usa para definir clases (por ejemplo, en Java). Y, por lo general, simplemente se denominan clases (sin el adjetivo concreto). Las clases concretas representan la representación conceptual de los objetos del mundo real. Las clases tienen propiedades llamadas atributos. Los atributos se implementan como variables globales y de instancia. Los métodos en las clases representan o definen el comportamiento de estas clases.
Las clases abstractas se declaran usando la palabra clave abstract (por ejemplo, en Java). Por lo general, las clases abstractas, también conocidas como clases base abstractas, no se pueden crear instancias. Por lo tanto, las clases abstractas solo tienen sentido si el lenguaje de programación admite la herencia (capacidad de crear subclases desde 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 cuales se derivan las clases secundarias, de modo que la clase secundaria compartirá las características incompletas de la clase primaria.
Las clases abstractas generalmente tienen implementación parcial o nula. Por otro lado, las clases concretas siempre tienen una implementación completa. A diferencia de las clases concretas, las clases abstractas no pueden ser instanciadas. Por lo tanto, las clases abstractas deben ampliarse para que sean útiles. Las clases abstractas pueden contener métodos abstractos, pero las clases concretas no pueden. Cuando se extiende una clase abstracta, todos los métodos (tanto abstractos como concretos) se heredan.