Sobes.tech
Middle

Jaké jsou rozdíly mezi rozhraními v Kotlinu a Javě?

sobes.tech AI

Odpověď od AI

Hlavní rozdíly:

  • Implementace výchozích metod: V Java 8 a novějších verzích lze v rozhraních implementovat metody s tělem (výchozí metody). V Kotlinu mají metody v rozhraních výchozí těla. Klíčové slovo default není potřeba.

  • Abstraktní a otevřené metody: V Java jsou všechny metody v rozhraní implicitně abstraktní. Pro vytvoření metody s tělem je třeba použít default. V Kotlinu jsou metody s tělem v rozhraních implicitně open a mohou být přepsány ve třídách, které rozhraní implementují. Metody bez těla jsou implicitně abstract.

  • Stav (Vlastnosti): V Java nemohou rozhraní obsahovat pole, pouze konstanty (final static). V Kotlinu mohou rozhraní deklarovat abstraktní vlastnosti, které musí být implementovány ve třídách, nebo vlastnosti s výchozími gettery/settery (backstage pole neukládají data).

  • Konstruktory: V Java nemohou rozhraní obsahovat konstruktory. V Kotlinu také rozhraní nemohou obsahovat konstruktory.

  • Modifikátory viditelnosti: V Java jsou metody rozhraní implicitně public. V Kotlinu jsou metody rozhraní implicitně public open.

Vlastnost Kotlin Java
Implementace metod Povolená (výchozí) Povolená (s default)
Abstraktnost metod Bez těla - abstract, s tělem - open Bez těla - abstract, s tělem - default
Stav (Vlastnosti) Povolené (abstraktní nebo s přístupovými metodami) Nepovolené (pouze konstanty)
Konstruktor Nepovolené Nepovolené
Modifikátor viditelnosti public open podle výchozího nastavení public podle výchozího nastavení

Příklad v Kotlinu:

interface MyInterface {
    val myProperty: String // Abstraktní vlastnost

    fun abstractMethod() // Abstraktní metoda

    fun defaultMethod() {
        // Výchozí implementace
        println("Výchozí implementace v Kotlin rozhraní")
    }
}

Příklad v Javě:

interface MyInterfaceJava {
    // Žádné vlastnosti, pouze konstanty jsou povoleny
    // public static final String MY_CONSTANT = "hodnota";

    void abstractMethod(); // Abstraktní metoda (implicitně veřejná a abstraktní)

    default void defaultMethod() { // Výchozí metoda
        // Výchozí implementace
        System.out.println("Výchozí implementace v Java rozhraní");
    }
}