Junior — Middle
Jak se liší abstraktní třída od rozhraní v objektově orientovaném programování?
sobes.tech AI
Odpověď od AI
Abstraktní třída a rozhraní v PHP mají následující rozdíly:
-
Abstraktní třída může obsahovat abstraktní metody (bez implementace), stejně jako metody s implementací a vlastnosti.
-
Rozhraní obsahuje pouze deklarace metod (od PHP 8 lze přidávat výchozí implementace, ale je to vlastnost), neobsahuje stav (vlastnosti).
-
Třída může dědit pouze od jedné abstraktní třídy, ale může implementovat více rozhraní.
-
Abstraktní třída se používá, když je třeba definovat základní implementaci a obecný kontrakt, zatímco rozhraní se používá, když je třeba definovat pouze kontrakt bez implementace.
Příklad:
abstract class Animal {
abstract public function makeSound();
public function sleep() {
echo "Spí";
}
}
interface CanFly {
public function fly();
}
class Bird extends Animal implements CanFly {
public function makeSound() {
echo "Pípat";
}
public function fly() {
echo "Letí";
}
}
Tímto způsobem abstraktní třída stanoví částečnou implementaci, rozhraní pouze kontrakt.