Sobes.tech
Junior

Ինչ են տեսանելիության մոդիֆիկատորները և ինչպես օգտագործել դրանք Kotlin-ում։

sobes.tech AI

Պատասխան AI-ից

Kotlin- ում տեսանելիության փոփոխիչները որոշում են ծրագրի այլ մասերի համար հայտարարությունների (դասերների, ինտերֆեյսների, ֆունկցիաների, հատկությունների) հասանելիությունը:

Տարբերակների հիմնական տեսանելիության փոփոխիչները՝

  • public: Նայվում է ամենուր: Դեպի default:
  • internal: Նայվում է միայն մեկ մոդուլում: Մոդուլը համարվում է Kotlin ֆայլերի հավաքածու, որոնք համատեղ կոմպիլացվում են:
  • protected: Նայվում է դասի և նրա ժառանգների (ներառյալ անդամները, որոնք սահմանված են ժառանգական դասերում): Չի նայվում դուրս պակետից:
  • private: Նայվում է միայն այն ֆայլում, որտեղ հայտարարված է: Դասի անդամների համար նայվում է միայն այդ դասի ներսում (ներառյալ նրա companion object-ը, ներքին և ներսի դասերը):

Օգտագործման օրինակ՝

// Ֆայլ: example.kt

private const val PRIVATE_CONSTANT = 1 // Նայվում է միայն այս ֆայլում

internal fun internalFunction() { // Նայվում է միայն մոդուլում
    println("Ներքին ֆունկցիա")
}

open class BaseClass {
    protected val protectedProperty = "Պաշտպանված" // Նայվում է այս դասում և նրա ժառանգներում

    fun publicMethod() { // Նայվում է ամենուր (դեպի default public)
        println("Համայն մեթոդ")
    }

    private fun privateMethod() { // Նայվում է միայն BaseClass-ի ներսում
        println("Անձնական մեթոդ")
    }
}

class DerivedClass : BaseClass() {
    fun accessProtected() {
        println("Հասանելիություն պաշտպանված հատկությանը: $protectedProperty") // Հասանելիություն protected
        // privateMethod() // Գործողություն սխալ: private չի նայվում ժառանգական դասում
    }
}

fun main() {
    val base = BaseClass()
    base.publicMethod()
    // base.protectedProperty // Գործողություն սխալ: protected չի նայվում դուրս դասից և ժառանգական դասերից

    val derived = DerivedClass()
    derived.accessProtected()

    internalFunction()
    // PRIVATE_CONSTANT // Գործողություն սխալ: private-ը վերևի մակարդակում միայն նշված ֆայլում է նայվում
}
Մոդիֆիկատոր Հասանելիություն Որտեղ օգտագործել
public Ամենուր Դեպի default, երբ այլ մոդիֆիկատոր նշված չէ
internal Մոդուլի ներսում API-ի համար գրադարանի կամ մոդուլի ներսում
protected Դասի և նրա ժառանգների (միայն անդամների համար) Դասերի ժառանգական շղթաների ստեղծման համար
private Ֆայլում (վերևի մակարդակ); դասի ներսում (անդամների համար) Իրականացման մանրամասների թաքցման համար ֆայլի կամ դասի ներսում