Sobes.tech
Middle

Aké sú rozdiely medzi rozhraniami v Kotlin a Java?

sobes.tech AI

Odpoveď od AI

Hlavné rozdiely:

  • Implementácia predvolených metód: V Jave 8 a novších verziách je možné v rozhraniach implementovať metódy s telom (default methods). V Kotlin-e majú metódy v rozhraniach predvolené telá. Kľúčové slovo default nie je potrebné.

  • Abstraktné a otvorené metódy: V Jave sú všetky metódy v rozhraní nejasne abstraktné. Ak chcete mať metódu s telom, použite default. V Kotlin-e sú metódy v rozhraniach s telom nejasne open a môžu byť prepísané v triedach, ktoré implementujú rozhranie. Metódy bez tela sú nejasne abstract.

  • Stav (Properties): V Jave rozhrania nemôžu obsahovať polia, iba konštanty (final static). V Kotlin-e môžu rozhrania deklarovať abstraktné vlastnosti, ktoré musia byť implementované v triedach, alebo vlastnosti s predvolenými gettermi/settermi (backstage field sa neukladá).

  • Konštruktory: V Jave rozhrania nemôžu obsahovať konštruktory. V Kotlin-e rozhrania nemôžu obsahovať konštruktory.

  • Modifikátory viditeľnosti: V Jave sú metódy rozhrania nejasne public. V Kotlin-e sú metódy rozhrania nejasne public open.

Funkcia Kotlin Java
Implementácia metód Povolená (predvolená) Povolená (s default)
Abstraktnosť metód Bez tela - abstract, s telom - open Bez tela - abstract, s telom - default
Stav (Properties) Povolené (abstraktné alebo s pristupmi) Nie povolené (len konštanty)
Konštruktory Nie povolené Nie povolené
Modifikátor viditeľnosti public open podľa predvolenej public podľa predvolenej

Príklad Kotlin:

interface MyInterface {
    val myProperty: String // Abstraktná vlastnosť

    fun abstractMethod() // Abstraktná metóda

    fun defaultMethod() {
        // Predvolená implementácia
        println("Default implementation in Kotlin interface")
    }
}

Príklad Java:

interface MyInterfaceJava {
    // Žiadne vlastnosti, povolené sú len konštanty
    // public static final String MY_CONSTANT = "value";

    void abstractMethod(); // Abstraktná metóda (nejasne public a abstract)

    default void defaultMethod() { // Predvolená metóda
        // Predvolená implementácia
        System.out.println("Default implementation in Java interface");
    }
}