Sobes.tech
Middle

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 default nė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škiai open ir gali būti perrašyti įgyvendinančiuose klasėse. Metodai be kūno yra neaiškiai abstract.

  • 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škiai public 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");
    }
}