Sobes.tech
Junior — Middle

¿Cuál es la diferencia entre una interfaz y una clase abstracta en el contexto de la programación orientada a objetos?

sobes.tech AI

Respuesta de la IA

La interfaz y la clase abstracta son dos formas de definir abstracciones en la programación orientada a objetos, pero tienen diferencias clave:

  • Interfaz describe un conjunto de métodos que una clase debe implementar, pero no contiene implementación (aunque en algunos lenguajes es posible tener métodos con implementación por defecto). La interfaz no puede contener estado (variables de instancia).
  • Clase abstracta puede contener tanto métodos abstractos (sin implementación) como métodos con implementación. También puede contener campos (estado).

Ejemplo en Swift:

protocol Vehicle {
    func startEngine()
}

class Car: Vehicle {
    func startEngine() {
        print("Motor encendido")
    }
}

// La clase abstracta en Swift se implementa mediante una clase con métodos que deben ser sobrescritos
class Animal {
    func makeSound() {
        fatalError("Este método debe ser sobrescrito")
    }
}

class Dog: Animal {
    override func makeSound() {
        print("Guau")
    }
}

De esta forma, la interfaz establece un contrato, y la clase abstracta puede proporcionar una implementación parcial y mantener estado.