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.