Sobes.tech
Junior — Middle

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.