Sobes.tech
Junior — Middle

Kaip skiriasi abstrakti klasė nuo sąsajos objektų orientuoto programavimo kalboje?

sobes.tech AI

Atsakymas iš AI

PHP abstrakti klasė ir sąsaja turi šiuos skirtumus:

  • Abstrakti klasė gali turėti abstrakčius metodus (be įgyvendinimo), taip pat metodus su įgyvendinimu ir savybes.

  • Sąsaja apima tik metodų deklaracijas (nuo PHP 8 galima pridėti numatytąją įgyvendinimą, tačiau tai yra ypatybė), ji neapima būsenos (savybių).

  • Klasė gali paveldėti tik iš vienos abstrakčios klasės, tačiau gali įgyvendinti kelias sąsajas.

  • Abstrakti klasė naudojama, kai reikia nustatyti pagrindinį įgyvendinimą ir bendrą sutartį, o sąsaja — kai reikia apibrėžti tik sutartį be įgyvendinimo.

Pavyzdys:

abstract class Animal {
    abstract public function makeSound();
    public function sleep() {
        echo "Miega";
    }
}

interface CanFly {
    public function fly();
}

class Bird extends Animal implements CanFly {
    public function makeSound() {
        echo "Čirškia";
    }
    public function fly() {
        echo "Skraido";
    }
}

Taip, abstrakti klasė nustato dalinį įgyvendinimą, o sąsaja — tik sutartį.