Las clases abstractas definen una abstracción que permite el polimorfismo y engloba objetos de distintos tipos, pero no pueden ser instanciadas directamente. Las subclases deben implementar todos los métodos abstractos. Las interfaces solo definen métodos sin implementación, y las clases que las implementan deben proveer la implementación de dichos métodos.