Sobes.tech
Middle

Wat zijn de verschillen tussen interfaces in Kotlin en Java?

sobes.tech AI

Antwoord van AI

Belangrijkste verschillen:

  • Implementatie van standaardmethoden: In Java 8 en hoger kunnen interfaces methoden met een lichaam implementeren (standaardmethoden). In Kotlin hebben interfaces standaard methoden met een lichaam. Het sleutelwoord default is niet nodig.

  • Abstracte en open methoden: In Java zijn alle methoden in interfaces impliciet abstract. Om een methode met lichaam te maken, moet default worden gebruikt. In Kotlin zijn methoden met lichaam in interfaces impliciet open en kunnen worden overschreven in klassen die de interface implementeren. Methoden zonder lichaam zijn impliciet abstract.

  • Status (Properties): In Java kunnen interfaces geen velden bevatten, alleen constanten (final static). In Kotlin kunnen interfaces abstracte eigenschappen declareren, die in klassen moeten worden geïmplementeerd, of eigenschappen met standaard getters/setters (backstage fields slaan geen gegevens op).

  • Constructors: In Java kunnen interfaces geen constructors bevatten. In Kotlin kunnen interfaces geen constructors bevatten.

  • Zichtbaarheidsmodificatoren: In Java zijn interface-methoden impliciet public. In Kotlin zijn interface-methoden impliciet public open.

Kenmerk Kotlin Java
Implementatie van methoden Toegestaan (standaard) Toegestaan (met default)
Abstractheid van methoden Zonder lichaam - abstract, met lichaam - open Zonder lichaam - abstract, met lichaam - default
Status (Properties) Toegestaan (abstract of met accessors) Niet toegestaan (alleen constanten)
Constructors Niet toegestaan Niet toegestaan
Zichtbaarheidsmodificator public open standaard public standaard

Voorbeeld in Kotlin:

interface MyInterface {
    val myProperty: String // Abstracte eigenschap

    fun abstractMethod() // Abstracte methode

    fun defaultMethod() {
        // Standaard implementatie
        println("Standaard implementatie in Kotlin interface")
    }
}

Voorbeeld in Java:

interface MyInterfaceJava {
    // Geen eigenschappen, alleen constanten toegestaan
    // public static final String MY_CONSTANT = "waarde";

    void abstractMethod(); // Abstracte methode (impliciet publiek en abstract)

    default void defaultMethod() { // Standaardmethode
        // Standaard implementatie
        System.out.println("Standaard implementatie in Java interface");
    }
}