Sobes.tech
Middle

Koje su razlike između interfejsa u Kotlinu i Javi?

sobes.tech АИ

Одговор од АИ

Основне разлике:

  • Реализација метода по подразумевану: У Јави 8 и новијим верзијама интерфејси могу имати методе са телом (default methods). У Kotlin-у, методи у интерфејсима имају подразумевана тела. Кључна реч default није потребна.

  • Абракти и отворени методи: У Јави, сви методи у интерфејсу су нејасно абстрактни. Да бисте направили метод са телом, користите default. У Kotlin-у, методи у интерфејсу са телом су нејасно open и могу бити преоптерећени у класи које реализују интерфејс. Методи без тела су нејасно abstract.

  • Стање (Properties): У Јави, интерфејси не могу садржати поља, осим константи (final static). У Kotlin-у, интерфејси могу објавити апстрактна својства која морају бити реализована у класи или својства са подразумеваним гетерима/сетерима (backstage field не чува).

  • Конструктори: У Јави, интерфејси не могу садржати конструкторе. У Kotlin-у, интерфејси не могу садржати конструкторе.

  • Модификатори видљивости: У Јави, методи у интерфејсу су нејасно public. У Kotlin-у, методи у интерфејсу су нејасно public open.

Особина Kotlin Java
Реализација метода Дозвољена (по подразумевану) Дозвољена (са default)
Абстрактност метода Без тела - abstract, са телом - open Без тела - abstract, са телом - default
Стање (Properties) Дозвољени (апстрактни или са приступницима) Непозвољени (само константе)
Конструктори Непозвољени Непозвољени
Модификатор видљивости public open по подразумевану public по подразумевану

Пример Kotlin:

interface MyInterface {
    val myProperty: String // Апстрактно својство

    fun abstractMethod() // Апстрактни метод

    fun defaultMethod() {
        // Метод по подразумевању
        println("Default implementation in Kotlin interface")
    }
}

Пример Јава:

interface MyInterfaceJava {
    // Без својстава, дозвољени су само константи
    // public static final String MY_CONSTANT = "value";

    void abstractMethod(); // Апстрактни метод (нејасно јавни и апстрактни)

    default void defaultMethod() { // Метод по подразумевању
        // Дефаулт имплементација
        System.out.println("Default implementation in Java interface");
    }
}