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"); }
}