Junior — Middle
Kuidas erineb abstraktne klass liidesest objektorienteeritud programmeerimises?
sobes.tech AI
Vastus AI-lt
PHP-s on abstraktne klass ja liides järgmised erinevused:
-
Abstraktne klass võib sisaldada abstraktseid meetodeid (ilma rakenduseta), samuti meetodeid koos rakendusega ja omadusi.
-
Liides sisaldab ainult meetodite deklaratsioone (alates PHP 8 saab lisada vaikimisi rakendusi, kuid see on omadus), ei sisalda olekut (omadusi).
-
Klass võib pärida ainult ühest abstraktsest klassist, kuid võib rakendada mitmeid liideseid.
-
Abstraktset klassi kasutatakse siis, kui tuleb määratleda põhiväljaanne ja üldine leping, samas kui liidest kasutatakse ainult lepingu määratlemiseks ilma rakenduseta.
Näide:
abstract class Animal {
abstract public function makeSound();
public function sleep() {
echo "Magab";
}
}
interface CanFly {
public function fly();
}
class Bird extends Animal implements CanFly {
public function makeSound() {
echo "Tirit";
}
public function fly() {
echo "Lennata";
}
}
Seega, abstraktne klass määratleb osalise rakenduse, liides — ainult lepingu.