Junior — Middle
Kako se razlikuje apstraktna klasa od interfejsa u objektno-orijentisanom programiranju?
sobes.tech АИ
Одговор од АИ
Apstraktna klasa i interfejs u PHP imaju sledeće razlike:
-
Apstraktna klasa može sadržavati apstraktne metode (bez implementacije), kao i metode sa implementacijom i svojstva.
-
Interfejs sadrži samo deklaracije metoda (od PHP 8 mogu se dodavati podrazumevane implementacije, ali to je osobina), ne sadrži stanje (svojstva).
-
Klasa može naslediti samo od jedne apstraktne klase, ali može implementirati više interfejsa.
-
Apstraktna klasa se koristi kada je potrebno definisati osnovnu implementaciju i opšti ugovor, dok se interfejs koristi kada je potrebno definisati samo ugovor bez implementacije.
Primer:
abstract class Animal {
abstract public function makeSound();
public function sleep() {
echo "Spava";
}
}
interface CanFly {
public function fly();
}
class Bird extends Animal implements CanFly {
public function makeSound() {
echo "Cvrkut";
}
public function fly() {
echo "Leti";
}
}
Na ovaj način, apstraktna klasa definiše delimičnu implementaciju, a interfejs samo ugovor.