Sobes.tech
Middle

Was sind die Unterschiede zwischen den Schnittstellen in Kotlin und Java?

sobes.tech KI

Antwort von AI

Hauptunterschiede:

  • Implementierung von Standardmethoden: In Java 8 und höher können in Schnittstellen Methoden mit Körper implementiert werden (Default-Methoden). In Kotlin haben Schnittstellen standardmäßig Methoden mit Körper. Das Schlüsselwort default ist nicht erforderlich.

  • Abstrakte und offene Methoden: In Java sind alle Methoden in Schnittstellen implizit abstrakt. Um eine Methode mit Körper zu haben, muss default verwendet werden. In Kotlin sind Methoden mit Körper in Schnittstellen implizit open und können in implementierenden Klassen überschrieben werden. Methoden ohne Körper sind implizit abstract.

  • Zustand (Properties): In Java können Schnittstellen keine Felder enthalten, nur Konstanten (final static). In Kotlin können Schnittstellen abstrakte Eigenschaften deklarieren, die in Klassen implementiert werden müssen, oder Eigenschaften mit Standard-Gettern/Settern (Backstage-Felder speichern keine Daten).

  • Konstruktoren: In Java können Schnittstellen keine Konstruktoren enthalten. In Kotlin können Schnittstellen keine Konstruktoren enthalten.

  • Sichtbarkeitsmodifikatoren: In Java sind Schnittstellenmethoden implizit public. In Kotlin sind Schnittstellenmethoden implizit public open.

Eigenschaft Kotlin Java
Implementierung von Methoden Erlaubt (standardmäßig) Erlaubt (mit default)
Abstraktheit der Methoden Ohne Körper - abstract, mit Körper - open Ohne Körper - abstract, mit Körper - default
Zustand (Properties) Erlaubt (abstrakt oder mit Accessoren) Nicht erlaubt (nur Konstanten)
Konstruktoren Nicht erlaubt Nicht erlaubt
Sichtbarkeitsmodifikator public open standardmäßig public standardmäßig

Beispiel in Kotlin:

interface MyInterface {
    val myProperty: String // Abstrakte Eigenschaft

    fun abstractMethod() // Abstrakte Methode

    fun defaultMethod() {
        // Standard-Implementierung
        println("Standard-Implementierung in Kotlin-Interface")
    }
}

Beispiel in Java:

interface MyInterfaceJava {
    // Keine Properties, nur Konstanten erlaubt
    // public static final String MY_CONSTANT = "Wert";

    void abstractMethod(); // Abstrakte Methode (implizit öffentlich und abstrakt)

    default void defaultMethod() { // Standardmethode
        // Standard-Implementierung
        System.out.println("Standard-Implementierung in Java-Interface");
    }
}