Cum se diferențiază o clasă abstractă de o interfață în programarea orientată pe obiecte?
sobes.tech AI
Răspuns de la AI
O clasă abstractă și o interfață în PHP au următoarele diferențe:
-
Clasa abstractă poate conține metode abstracte (fără implementare), precum și metode cu implementare și proprietăți.
-
Interfața conține doar declarații de metode (începând cu PHP 8, se pot adăuga implementări implicite, dar aceasta este o caracteristică), nu conține stare (proprietăți).
-
O clasă poate moșteni doar o clasă abstractă, dar poate implementa mai multe interfețe.
-
Clasa abstractă este utilizată atunci când trebuie să se definească o implementare de bază și un contract general, în timp ce interfața este utilizată atunci când trebuie să se definească doar un contract fără implementare.
Exemplu:
abstract class Animal {
abstract public function makeSound();
public function sleep() {
echo "Dormind";
}
}
interface CanFly {
public function fly();
}
class Bird extends Animal implements CanFly {
public function makeSound() {
echo "Ciripit";
}
public function fly() {
echo "Zburând";
}
}
Astfel, clasa abstractă stabilește o implementare parțială, iar interfața doar contractul.