Sobes.tech
Junior — Middle

¿En qué se diferencia una clase abstracta de una interfaz en programación orientada a objetos?

sobes.tech AI

Respuesta de la IA

Una clase abstracta y una interfaz en PHP tienen las siguientes diferencias:

  • Clase abstracta puede contener métodos abstractos (sin implementación), así como métodos con implementación y propiedades.

  • Interfaz solo contiene declaraciones de métodos (a partir de PHP 8 se pueden agregar implementaciones por defecto, pero es una característica), no contiene estado (propiedades).

  • Una clase solo puede heredar de una clase abstracta, pero puede implementar varias interfaces.

  • La clase abstracta se usa cuando se necesita definir una implementación base y un contrato general, mientras que la interfaz se usa cuando solo se necesita definir un contrato sin implementación.

Ejemplo:

abstract class Animal {
    abstract public function makeSound();
    public function sleep() {
        echo "Durmiendo";
    }
}

interface CanFly {
    public function fly();
}

class Bird extends Animal implements CanFly {
    public function makeSound() {
        echo "Cantar";
    }
    public function fly() {
        echo "Volando";
    }
}

De esta manera, la clase abstracta define una implementación parcial, y la interfaz solo el contrato.