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 |
Ֆայլում (վերևի մակարդակ); դասի ներսում (անդամների համար) | Իրականացման մանրամասների թաքցման համար ֆայլի կամ դասի ներսում |