Junior
Cosa sono i modificatori di visibilità e come usarli in Kotlin?
sobes.tech AI
Risposta dell'AI
I modificatori di visibilità in Kotlin determinano l'accessibilità delle dichiarazioni (classi, interfacce, funzioni, proprietà) alle altre parti del programma.
I principali modificatori di visibilità:
public: Visibile ovunque. È il modificatore di default.internal: Visibile solo all'interno di un modulo. Un modulo è considerato un insieme di file Kotlin compilati insieme.protected: Visibile all'interno della classe e delle sue sottoclassi (inclusi i membri definiti nelle classi derivate). Non visibile al di fuori del package.private: Visibile solo all'interno del file in cui è dichiarato. Per i membri di classe, solo all'interno di quella classe (e del suo oggetto companion, classi annidate e interne).
Applicazione dei modificatori:
- A classi, interfacce, oggetti e loro costruttori.
- A funzioni, proprietà e loro getter/setter a livello superiore (fuori dalle classi).
- A membri di classe (classi annidate, interne, funzioni, proprietà).
Esempio:
// File: example.kt
private const val PRIVATE_CONSTANT = 1 // Visibile solo in questo file
internal fun internalFunction() { // Visibile solo all'interno del modulo
println("Funzione interna chiamata")
}
open class BaseClass {
protected val protectedProperty = "Protetto" // Visibile in questa classe e nelle sue sottoclassi
fun publicMethod() { // Visibile ovunque (public di default)
println("Metodo pubblico chiamato")
}
private fun privateMethod() { // Visibile solo all'interno di BaseClass
println("Metodo privato chiamato")
}
}
class DerivedClass : BaseClass() {
fun accessProtected() {
println("Accesso alla proprietà protetta: $protectedProperty") // Accesso a protected
// privateMethod() // Errore: private non visibile nella sottoclasse
}
}
fun main() {
val base = BaseClass()
base.publicMethod()
// base.protectedProperty // Errore: protected non visibile fuori dalla classe e dalle sue sottoclassi
val derived = DerivedClass()
derived.accessProtected()
internalFunction()
// PRIVATE_CONSTANT // Errore: private a livello superiore visibile solo nel file di dichiarazione
}
| Modificatore | Accessibilità | Dove usare |
|---|---|---|
public |
Ovunque | Per default, quando non viene specificato un altro modificatore |
internal |
All'interno del modulo | Per API all'interno di una libreria o di un modulo |
protected |
All'interno della classe e delle sue sottoclassi (per i membri) | Per creare gerarchie di classi con ereditarietà |
private |
All'interno del file (a livello superiore); all'interno della classe (per i membri) | Per nascondere dettagli di implementazione all'interno del file o della classe |