Sobes.tech
Middle

¿En qué se diferencia una clase abstracta de una interfaz?

sobes.tech AI

Respuesta de la IA

Clase abstracta — es una clase que puede contener métodos implementados y métodos abstractos (sin implementación). Sirve como base para la herencia y puede contener estado (campos).

Interfaz — es un contrato que define un conjunto de métodos sin implementación (en el sentido clásico). La clase que implementa la interfaz debe implementar todos sus métodos.

Diferencias principales:

  • La clase abstracta puede contener implementación y estado, la interfaz solo firmas de métodos (en algunos lenguajes, las interfaces pueden contener métodos por defecto).
  • Una clase solo puede heredar de una clase abstracta, pero puede implementar varias interfaces.
  • La clase abstracta proporciona una implementación parcial, la interfaz solo el contrato.

Ejemplo en Java:

abstract class Animal {
    void eat() { System.out.println("Comiendo"); }
    abstract void sound();
}

interface Flyable {
    void fly();
}

class Bird extends Animal implements Flyable {
    void sound() { System.out.println("Cantar"); }
    public void fly() { System.out.println("Volando"); }
}