Sobes.tech
Junior — Middle

Wie unterscheidet sich eine abstrakte Klasse von einer Schnittstelle in der objektorientierten Programmierung?

sobes.tech KI

Antwort von AI

Eine abstrakte Klasse und eine Schnittstelle in PHP haben folgende Unterschiede:

  • Abstrakte Klasse kann sowohl abstrakte Methoden (ohne Implementierung) als auch Methoden mit Implementierung und Eigenschaften enthalten.

  • Schnittstelle enthält nur Methodendeklarationen (ab PHP 8 können Standardimplementierungen hinzugefügt werden, aber das ist eine Besonderheit), enthält keinen Zustand (Eigenschaften).

  • Eine Klasse kann nur von einer abstrakten Klasse erben, aber mehrere Schnittstellen implementieren.

  • Die abstrakte Klasse wird verwendet, wenn eine Basiseinrichtung und ein allgemeiner Vertrag festgelegt werden sollen, während die Schnittstelle nur den Vertrag ohne Implementierung definiert.

Beispiel:

abstract class Animal {
    abstract public function makeSound();
    public function sleep() {
        echo "Schläft";
    }
}

interface CanFly {
    public function fly();
}

class Bird extends Animal implements CanFly {
    public function makeSound() {
        echo "Zwitschern";
    }
    public function fly() {
        echo "Fliegen";
    }
}

Auf diese Weise legt die abstrakte Klasse eine teilweise Implementierung fest, die Schnittstelle nur den Vertrag.