Sobes.tech
Middle

Фарқиятҳои байни интерфейсҳо дар Kotlin ва Java чистанд?

sobes.tech AI

Ҷавоб аз AI

Асосӣ фарқиятҳо:

  • Иҷрои методҳои пешфарзӣ: Дар Java 8 ва версияҳои навтар, дар интерфейсҳо метавон методҳо бо бадан (default methods) иҷро кард. Дар Kotlin, методҳо дар интерфейсҳо баданҳои пешфарз доранд. Калимаи default зарур нест.

  • Методҳои абстрактӣ ва кушод: Дар Java, ҳама методҳои интерфейс ба таври ғайрирасмӣ абстрактӣ мебошанд. Барои сохтани метод бо бадан, бояд default истифода шавад. Дар Kotlin, методҳо дар интерфейсҳо бо бадан ғайрирасмӣ open мебошанд ва метавонанд дар синфҳое, ки интерфейсро иҷро мекунанд, иваз карда шаванд. Методҳои бе бадан ғайрирасмӣ abstract мебошанд.

  • Масъулият (Properties): Дар Java, интерфейсҳо наметавонанд майдон дошта бошанд, танҳо константҳо (final static). Дар Kotlin, интерфейсҳо метавонанд хосиятҳои абстрактӣ эълон кунанд, ки бояд дар синфҳо иҷро шаванд, ё хосиятҳое бо гетер ва сеттерҳои пешфарз (backstage field намеёбанд).

  • Конструкторҳо: Дар Java, интерфейсҳо наметавонанд конструктор дошта бошанд. Дар Kotlin, интерфейсҳо наметавонанд конструктор дошта бошанд.

  • Модификаторҳои назоратӣ: Дар Java, методҳои интерфейс ба таври ғайрирасмӣ 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")
    }
}

Маслиҳат Java:

interface MyInterfaceJava {
    // Ҳеҷ хусусият, танҳо константҳо иҷозат дода шудаанд
    // public static final String MY_CONSTANT = "value";

    void abstractMethod(); // Метод абстрактӣ (публич ва абстрактӣ ба таври ғайрирасмӣ)

    default void defaultMethod() { // Метод пешфарзӣ
        // Иҷрои пешфарзӣ
        System.out.println("Default implementation in Java interface");
    }
}