Junior
Ce sunt modificatorii de vizibilitate și cum să îi folosiți în Kotlin?
sobes.tech AI
Răspuns de la AI
Modificatorii de vizibilitate în Kotlin determină accesibilitatea declarațiilor (clase, interfețe, funcții, proprietăți) pentru alte părți ale programului.
Principalii modificatori de vizibilitate:
public: Vizibil peste tot. Este modificatorul implicit.internal: Vizibil doar în interiorul unui modul. Un modul este considerat un ansamblu de fișiere Kotlin compilate împreună.protected: Vizibil în interiorul clasei și al subclasei sale (inclusiv membrii definiți în clasele moștenitoare). Nu este vizibil în afara pachetului.private: Vizibil doar în interiorul fișierului în care este declarat. Pentru membrii clasei, doar în interiorul acesteia (și al obiectului său companion, claselor în interior și interne).
Aplicarea modificatorilor:
- La clase, interfețe, obiecte și constructorii lor.
- La funcții, proprietăți și getter/setter-urile lor la nivel superior (în afara claselor).
- La membrii clasei (clase în interior, clase interne, funcții, proprietăți).
Exemplu:
// Fișier: example.kt
private const val PRIVATE_CONSTANT = 1 // Vizibil doar în acest fișier
internal fun internalFunction() { // Vizibil doar în interiorul modulului
println("Funcție internă apelată")
}
open class BaseClass {
protected val protectedProperty = "Protected" // Vizibil în această clasă și în subclasele sale
fun publicMethod() { // Vizibil peste tot (public implicit)
println("Metodă publică apelată")
}
private fun privateMethod() { // Vizibil doar în interiorul clasei BaseClass
println("Metodă privată apelată")
}
}
class DerivedClass : BaseClass() {
fun accessProtected() {
println("Acces la proprietatea protejată: $protectedProperty") // Acces la protected
// privateMethod() // Eroare: private nu este vizibil în subclasă
}
}
fun main() {
val base = BaseClass()
base.publicMethod()
// base.protectedProperty // Eroare: protected nu este vizibil în afara clasei și subclasei
val derived = DerivedClass()
derived.accessProtected()
internalFunction()
// PRIVATE_CONSTANT // Eroare: private la nivel superior vizibil doar în fișierul de declarație
}
| Modificator | Accesibilitate | Unde să folosiți |
|---|---|---|
public |
Oriunde | Implicit, când nu se specifică alt modificator |
internal |
În interiorul modulului | Pentru API în cadrul bibliotecii sau modulului |
protected |
În interiorul clasei și al subclasei (pentru membri) | Pentru crearea ierarhiilor de clase cu moștenire |
private |
În interiorul fișierului (la nivel superior); în interiorul clasei (pentru membri) | Pentru ascunderea detaliilor de implementare în interiorul fișierului sau clasei |