La clase abstracta y la interfaz son dos construcciones orientadas 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 una interfaz se puede considerar como un medio para implementar un contrato. La clase abstracta es una clase que no se puede inicializar pero se puede extender.
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 y se puede agregar funcionalidad para completarlas.
Una interfaz es un tipo de clase abstracta que se utiliza para especificar un contrato que debe implementarse por clases. En Java, el tipo de referencia de objeto se puede definir como un tipo de interfaz. Pero ese objeto debe ser nulo o debe contener un objeto de una clase, que implementa esa interfaz en particular.