Kira
Una clase abstracta es una clase creada únicamente para ser la clase principal de varias subclases y para definir algunos métodos y atributos comunes que heredarán las subclases. Nunca crearemos un objeto a partir de una clase abstracta, es un punto de partida desde el cual construiremos otras clases (que se pueden instanciar).
Por ejemplo, si modela un banco, crearía una clase abstracta llamada cuenta y luego subclases como cuenta de ahorros, cuenta de depósito, cuenta comercial. La clase abstracta puede tener algunos métodos abstractos y algunos métodos reales, así como algunos atributos.
Las interfaces son muy similares a las clases abstractas, con una diferencia importante: TODOS sus métodos deben ser abstractos, NO tienen cuerpo, solo un nombre, una lista de parámetros y un tipo de resultado. Cuando algo hereda de una interfaz, debe definir el código del cuerpo de los métodos abstractos en la interfaz. Una interfaz es efectivamente una plantilla que espera la adición de detalles. Cuando otra clase implementa una interfaz, estás diciendo "Voy a usar todos estos métodos vacíos, pero escribiré mi propio código de cuerpo para cada uno de ellos". Mientras que en una clase abstracta puede que ya exista un código de cuerpo.