Sobes.tech
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.