Junior
Kas yra matomumo modifikatoriai ir kaip juos naudoti Kotlin?
sobes.tech AI
Atsakymas iš AI
Kotlin mato matomumo modifikatoriai nustato prieinamumą deklaracijoms (klasėms, interfeisams, funkcijoms, savybėms) kitiems programos dalims.
Pagrindiniai matomumo modifikatoriai:
public: matomas visur. Numatytoji reikšmė.internal: matomas tik viename modulyje. Modulis laikomas Kotlin failų rinkiniu, kurie yra kompiliuojami kartu.protected: matomas klasės ir jos paveldėtojų (įskaitant narius, apibrėžtus paveldėtojų klasėse) viduje. Iš išorės iš paketo nematomas.private: matomas tik to failo viduje, kuriame jis deklaruotas. Klasės nariai matomi tik šioje klasėje (įskaitant jos companion object, įterptus ir vidinius klases).
Modifikatorių naudojimas:
- Klasei, interfeisui, objektui ir jų konstruktoriams.
- Funkcijoms, savybėms ir jų getteriams/setteriui aukštesniame lygyje (už klasių ribų).
- Klasės nariams (įterptos klasės, vidinės klasės, funkcijos, savybės).
Pavyzdys:
// Failas: example.kt
private const val PRIVATE_CONSTANT = 1 // Matomas tik šiame faile
internal fun internalFunction() { // Matomas tik modulyje
println("Vidinė funkcija")
}
open class BaseClass {
protected val protectedProperty = "Apsaugota" // Matoma šiame klase ir jos paveldėtojose
fun publicMethod() { // Matomas visur (numatyta public)
println("Viešas metodas")
}
private fun privateMethod() { // Matomas tik šioje klasėje
println("Privatus metodas")
}
}
class DerivedClass : BaseClass() {
fun accessProtected() {
println("Prieiga prie apsaugotos savybės: $protectedProperty") // Prieiga prie protected
// privateMethod() // Klaida: private nėra matomas paveldėtojoje klasėje
}
}
fun main() {
val base = BaseClass()
base.publicMethod()
// base.protectedProperty // Klaida: protected nėra matomas už klasės ir paveldėtojų ribų
val derived = DerivedClass()
derived.accessProtected()
internalFunction()
// PRIVATE_CONSTANT // Klaida: private aukštesniame lygyje matomas tik deklaracijos faile
}
| Modifikatorius | Prieinamumas | Kur naudoti |
|---|---|---|
public |
Visur | Numatyta, kai nenurodytas kitas modifikatorius |
internal |
Modulio viduje | API bibliotekos ar modulio viduje |
protected |
Klasės ir jos paveldėtojų viduje (nariams) | Klasės hierarchijų kūrimui ir paveldėjimui |
private |
Failo viduje (aukščiausio lygio); klasės viduje (nariams) | Detalių slėpimui failo ar klasės viduje |