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.