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į.