Junior — Middle
Qual è la differenza tra un'interfaccia e una classe astratta nel contesto della programmazione orientata agli oggetti?
sobes.tech AI
Risposta dell'AI
L'interfaccia e la classe astratta sono due modi per definire astrazioni nella programmazione orientata agli oggetti, ma hanno differenze chiave:
- Interfaccia descrive un insieme di metodi che una classe deve implementare, ma non contiene implementazione (anche se in alcuni linguaggi sono possibili metodi con implementazione di default). L'interfaccia non può contenere stato (variabili di istanza).
- Classe astratta può contenere sia metodi astratti (senza implementazione) che metodi con implementazione. Può anche contenere campi (stato).
Esempio in Swift:
protocol Vehicle {
func startEngine()
}
class Car: Vehicle {
func startEngine() {
print("Motore avviato")
}
}
// La classe astratta in Swift si implementa tramite una classe con metodi da sovrascrivere
class Animal {
func makeSound() {
fatalError("Questo metodo deve essere sovrascritto")
}
}
class Dog: Animal {
override func makeSound() {
print("Bau")
}
}
In questo modo, l'interfaccia stabilisce un contratto, e la classe astratta può fornire un'implementazione parziale e mantenere lo stato.