Sobes.tech
Junior

Quali sono le principali differenze tra una classe e un'interfaccia in Kotlin?

sobes.tech AI

Risposta dell'AI

  • Classe: può contenere proprietà (stati) e funzioni (comportamento). Può essere astratta, aperta (per ereditarietà) o finale. I costruttori definiscono come creare gli oggetti. Supporta l'ereditarietà da una singola classe e l'implementazione multipla di interfacce.
  • Interfaccia: definisce un contratto di comportamento che le classi devono implementare. Può contenere dichiarazioni astratte di funzioni e proprietà, così come funzioni con implementazione (Java 8+). Non può contenere stati (proprietà con campo di supporto). Una classe può implementare più interfacce. Non ha costruttori.

Tabella comparativa:

Aspetto Classe Interfaccia
Stato Può avere proprietà con valore. Non può avere proprietà con valore (solo astratte).
Costruttori Possono esistere. Non ne hanno.
Implementazione Può fornire implementazione completa. Fornisce implementazione parziale o completa (con metodi di default).
Ereditarietà Eredita da una sola classe. Implementa più interfacce.
Inizializzazione Può essere istanziata. Non può essere istanziata direttamente.
Tipo Concreta o astratta. Solo contratto di comportamento.

Esempio di classe:

class Person(val name: String) { // classe con costruttore e proprietà
    fun greet() {
        println("Hello, my name is $name")
    }
}

Esempio di interfaccia:

interface Greeter { // interfaccia con metodo
    fun greet()
}

class EnglishGreeter : Greeter { // classe che implementa l'interfaccia
    override fun greet() {
        println("Hello!")
    }
}