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
defaultnie 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 nejasneopena môžu byť prepísané v triedach, ktoré implementujú rozhranie. Metódy bez tela sú nejasneabstract. -
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 nejasnepublic 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");
}
}