Come si differenzia una classe astratta da un'interfaccia nella programmazione orientata agli oggetti?
sobes.tech AI
Risposta dell'AI
Una classe astratta e un'interfaccia in PHP hanno le seguenti differenze:
-
Classe astratta può contenere metodi astratti (senza implementazione), così come metodi con implementazione e proprietà.
-
Interfaccia contiene solo dichiarazioni di metodi (a partire da PHP 8, è possibile aggiungere implementazioni di default, ma questa è una caratteristica), non contiene stato (proprietà).
-
Una classe può ereditare solo da una classe astratta, ma può implementare più interfacce.
-
La classe astratta viene usata quando si vuole definire un'implementazione di base e un contratto generale, mentre l'interfaccia viene usata quando si vuole definire solo un contratto senza implementazione.
Esempio:
abstract class Animal {
abstract public function makeSound();
public function sleep() {
echo "Dormendo";
}
}
interface CanFly {
public function fly();
}
class Bird extends Animal implements CanFly {
public function makeSound() {
echo "Cinguettio";
}
public function fly() {
echo "Volando";
}
}
In questo modo, la classe astratta definisce una implementazione parziale, l'interfaccia solo il contratto.