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