Una clase abstracta define comportamiento común para sus subclases pero no puede crear instancias, mientras que una interfaz define un contrato de métodos abstractos que clases concretas deben implementar. Ambos permiten modelar jerarquías de clases con comportamiento polimórfico.