Kokios yra skirtumai tarp Kotlin ir Java sąsajų?
sobes.tech AI
Atsakymas iš AI
Pagrindiniai skirtumai:
-
Numatytųjų metodų įgyvendinimas: Java 8 ir naujesnėse versijose interfeisuose galima įgyvendinti metodus su kūnu (default methods). Kotlin kalboje, interfeisų metodai turi numatytus kūnus. Raktinis žodis
defaultnėra reikalingas. -
Abstraktūs ir atviri metodai: Java, visi interfeiso metodai yra neaiškiai abstraktūs. Norint turėti metodą su kūnu, naudokite
default. Kotlin, interfeiso metodai su kūnu yra neaiškiaiopenir gali būti perrašyti įgyvendinančiuose klasėse. Metodai be kūno yra neaiškiaiabstract. -
Savybės (Properties): Java interfeisai negali turėti laukų, tik konstantas (
final static). Kotlin interfeisai gali deklaruoti abstrakčias savybes, kurias turi įgyvendinti klasės, arba savybes su numatytais getteriais/setteriais (backstage field nėra saugomas). -
Konstruktoriai: Java interfeisai negali turėti konstruktorių. Kotlin interfeisai negali turėti konstruktorių.
-
Matomumo modifikatoriai: Java, interfeiso metodai yra neaiškiai
public. Kotlin, interfeiso metodai yra neaiškiaipublic open.
| Savybė | Kotlin | Java |
|---|---|---|
| Metodų įgyvendinimas | Leidžiama (numatyta) | Leidžiama (su default) |
| Abstraktumas metodų | Be kūno - abstract, su kūnu - open |
Be kūno - abstract, su kūnu - default |
| Savybės (Properties) | Leidžiama (abstrakčios arba su prieigos metodais) | Neleidžiama (tik konstantos) |
| Konstruktoriai | Neleidžiama | Neleidžiama |
| Matomumo modifikatorius | public open pagal numatytąjį |
public pagal numatytąjį |
Pavyzdys Kotlin:
interface MyInterface {
val myProperty: String // Abstrakti savybė
fun abstractMethod() // Abstraktus metodas
fun defaultMethod() {
// Numatyta įgyvendinimas
println("Default implementation in Kotlin interface")
}
}
Pavyzdys Java:
interface MyInterfaceJava {
// Be savybių, leidžiamos tik konstantos
// public static final String MY_CONSTANT = "value";
void abstractMethod(); // Abstraktus metodas (neaiškiai `public` ir `abstract`)
default void defaultMethod() { // Numatyta metodas
// Numatyta įgyvendinimas
System.out.println("Default implementation in Java interface");
}
}