Miben különbözik egy absztrakt osztály egy interfésztől az objektumorientált programozásban?
sobes.tech MI
Válasz az MI-től
A PHP-ban az absztrakt osztály és az interfész a következő különbségekkel rendelkezik:
-
Abszttrakt osztály tartalmazhat absztrakt módszereket (megvalósítás nélkül), valamint megvalósított módszereket és tulajdonságokat.
-
Interfész csak módszernyilatkozatokat tartalmaz (PHP 8-tól kezdve lehet alapértelmezett megvalósításokat is hozzáadni, de ez egy sajátosság), nem tartalmaz állapotot (tulajdonságokat).
-
Egy osztály csak egy absztrakt osztályból örökölhet, de több interfészt is megvalósíthat.
-
Az absztrakt osztály akkor hasznos, ha alapértelmezett megvalósítást és általános szerződést akarunk meghatározni, míg az interfész csak szerződést definiál megvalósítás nélkül.
Példa:
abstract class Animal {
abstract public function makeSound();
public function sleep() {
echo "Alszik";
}
}
interface CanFly {
public function fly();
}
class Bird extends Animal implements CanFly {
public function makeSound() {
echo "Csiripel";
}
public function fly() {
echo "Repül";
}
}
Így az absztrakt osztály részleges megvalósítást határoz meg, az interfész csak a szerződést.