Sobes.tech
Junior — Middle

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.