Sobes.tech
Junior — Middle

Ako sa líši abstraktná trieda od rozhrania v objektovo orientovanom programovaní?

sobes.tech AI

Odpoveď od AI

Abstraktná trieda a rozhranie v PHP majú nasledujúce rozdiely:

  • Abstraktná trieda môže obsahovať abstraktné metódy (bez implementácie), ako aj metódy s implementáciou a vlastnosti.

  • Rozhranie obsahuje iba deklarácie metód (od PHP 8 môžu byť pridané predvolené implementácie, ale je to vlastnosť), neobsahuje stav (vlastnosti).

  • Trieda môže dediť iba od jednej abstraktnej triedy, ale môže implementovať viacero rozhraní.

  • Abstraktná trieda sa používa, keď je potrebné definovať základnú implementáciu a všeobecný kontrakt, zatiaľ čo rozhranie — keď je potrebné definovať iba kontrakt bez implementácie.

Prí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ípa";
    }
    public function fly() {
        echo "Letí";
    }
}

Takto, abstraktná trieda stanoví čiastočnú implementáciu, rozhranie — iba kontrakt.