¿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.