Sobes.tech
Junior — Middle

Como é que uma classe abstrata difere de uma interface na programação orientada a objetos?

sobes.tech IA

Resposta da IA

Uma classe abstrata e uma interface em PHP têm as seguintes diferenças:

  • Classe abstrata pode conter métodos abstratos (sem implementação), bem como métodos com implementação e propriedades.

  • Interface contém apenas declarações de métodos (a partir do PHP 8, é possível adicionar implementações padrão, mas isso é uma característica), não contém estado (propriedades).

  • Uma classe pode herdar apenas de uma classe abstrata, mas pode implementar várias interfaces.

  • A classe abstrata é usada quando se deseja definir uma implementação base e um contrato geral, enquanto a interface é usada quando se deseja definir apenas um contrato sem implementação.

Exemplo:

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

interface CanFly {
    public function fly();
}

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

Assim, a classe abstrata define uma implementação parcial, e a interface apenas o contrato.