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