Sobes.tech
Middle

Qual è la differenza tra una classe astratta e un'interfaccia?

sobes.tech AI

Risposta dell'AI

Classe astratta — è una classe che può contenere metodi implementati e metodi astratti (senza implementazione). Serve come base per l'ereditarietà e può contenere stato (campi).

Interfaccia — è un contratto che definisce un insieme di metodi senza implementazione (nel senso classico). La classe che implementa l'interfaccia deve implementare tutti i suoi metodi.

Principali differenze:

  • La classe astratta può contenere implementazione e stato, l'interfaccia — solo firme di metodi (in alcuni linguaggi, le interfacce possono contenere metodi di default).
  • Una classe può ereditare solo da una classe astratta, ma può implementare più interfacce.
  • La classe astratta fornisce un'implementazione parziale, l'interfaccia — solo il contratto.

Esempio in Java:

abstract class Animal {
    void eat() { System.out.println("Mangiare"); }
    abstract void sound();
}

interface Flyable {
    void fly();
}

class Bird extends Animal implements Flyable {
    void sound() { System.out.println("Cinguettio"); }
    public void fly() { System.out.println("Volando"); }
}