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-ում, ինտերֆեյսները կարող են հայտարարել աբստրակտ հատկություններ, որոնք պետք է իրականացվեն դասերում, կամ հատկություններ՝ նախնական getter-ներով/setter-ներով (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(); // Աբստրակտ մեթոդ (անորոշ `public` և `abstract`)

    default void defaultMethod() { // Նախնական մեթոդ
        // Նախնական իրականացում
        System.out.println("Default implementation in Java interface");
    }
}