Quali sono le differenze tra le interfacce in Kotlin e Java?
sobes.tech AI
Risposta dell'AI
Principali differenze:
-
Implementazione dei metodi di default: In Java 8 e versioni successive, è possibile implementare metodi con corpo (metodi di default) nelle interfacce. In Kotlin, i metodi nelle interfacce hanno corpi di default. La parola chiave
defaultnon è necessaria. -
Metodi astratti e aperti: In Java, tutti i metodi di interfaccia sono implicitamente astratti. Per avere un metodo con corpo, si usa
default. In Kotlin, i metodi con corpo nelle interfacce sono implicitamenteopene possono essere sovrascritti nelle classi che implementano l'interfaccia. I metodi senza corpo sono implicitamenteabstract. -
Stato (Proprietà): In Java, le interfacce non possono contenere campi, solo costanti (
final static). In Kotlin, le interfacce possono dichiarare proprietà astratte, che devono essere implementate nelle classi, o proprietà con getter/setter di default (i campi di supporto non memorizzano dati). -
Costruttori: In Java, le interfacce non possono contenere costruttori. In Kotlin, le interfacce non possono contenere costruttori.
-
Modificatori di visibilità: In Java, i metodi di interfaccia sono implicitamente
public. In Kotlin, i metodi di interfaccia sono implicitamentepublic open.
| Caratteristica | Kotlin | Java |
|---|---|---|
| Implementazione dei metodi | Permessa (di default) | Permessa (con default) |
| Astrattezza dei metodi | Senza corpo - abstract, con corpo - open |
Senza corpo - abstract, con corpo - default |
| Stato (Proprietà) | Permesso (astratte o con accessori) | Non permesso (solo costanti) |
| Costruttori | Non permesso | Non permesso |
| Modificatore di visibilità | public open di default |
public di default |
Esempio in Kotlin:
interface MyInterface {
val myProperty: String // Proprietà astratta
fun abstractMethod() // Metodo astratto
fun defaultMethod() {
// Implementazione di default
println("Implementazione di default nell'interfaccia Kotlin")
}
}
Esempio in Java:
interface MyInterfaceJava {
// Nessuna proprietà, solo costanti consentite
// public static final String MY_CONSTANT = "valore";
void abstractMethod(); // Metodo astratto (implicitamente pubblico e astratto)
default void defaultMethod() { // Metodo di default
// Implementazione di default
System.out.println("Implementazione di default nell'interfaccia Java");
}
}