Sobes.tech
Middle

Millised on erinevused Kotlin ja Java liidestes?

sobes.tech AI

Vastus AI-lt

Peamised erinevused:

  • Vaikimisi meetodite rakendamine: Java 8 ja uuemates versioonides saab liideseid rakendada meetoditega kehas (default methods). Kotlinis on liideste meetoditel vaikimisi kehad. default märksõna ei ole vajalik.

  • Abstraktsed ja avatud meetodid: Java puhul on kõik liidese meetodid kaudselt abstraktsed. Meetodi keha loomiseks kasutage default. Kotlinis on liidese meetodid kehas kaudselt open ja neid saab ülekirjutada liidest implementeerivates klassides. Meetodid ilma kehadeta on kaudselt abstract.

  • Omadused (Properties): Java liideseid ei saa sisaldada välju, ainult konstante (final static). Kotlinis võivad liidesed deklareerida abstraktseid omadusi, mida klassid peavad rakendama, või omadusi vaikimisi getterite/setteritega (backstage väli ei salvestata).

  • Konstruktorid: Java liideseid ei saa sisaldada konstruktorid. Kotlinis ei saa liideseid konstruktoritega defineerida.

  • Nähtavuse modifikaatorid: Java puhul on liidese meetodid kaudselt public. Kotlinis on liidese meetodid kaudselt public open.

Omadus Kotlin Java
Meetodite rakendamine Lubatud (vaikimisi) Lubatud (koos default)
Abstraktsus meetodites Ilma kehadeta - abstract, koos kehadega - open Ilma kehadeta - abstract, koos kehadega - default
Omadused (Properties) Lubatud (abstraktsed või koos juurdepääsumeetoditega) Ei lubata (ainult konstantsed)
Konstruktorid Ei lubata Ei lubata
Nähtavuse modifikaator public open vaikimisi public vaikimisi

Näide Kotlin:

interface MyInterface {
    val myProperty: String // Abstraktne omadus

    fun abstractMethod() // Abstraktne meetod

    fun defaultMethod() {
        // Vaikimisi rakendus
        println("Default implementation in Kotlin interface")
    }
}

Näide Java:

interface MyInterfaceJava {
    // Ei ole omadusi, ainult konstantsed on lubatud
    // public static final String MY_CONSTANT = "value";

    void abstractMethod(); // Abstraktne meetod (kaudne `public` ja `abstract`)

    default void defaultMethod() { // Vaikimisi meetod
        // Vaikimisi rakendus
        System.out.println("Default implementation in Java interface");
    }
}