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
defaultnení 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ěopena 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í");
}
}