In questo articolo, imparerai a conoscere tutti e 4 i modificatori di visibilità in Kotlin e come funzionano in diversi scenari.
I modificatori di visibilità sono parole chiave che impostano la visibilità (accessibilità) di classi, oggetti, interfaccia, costruttori, funzioni, proprietà e relativi setter. (Non è possibile impostare il modificatore di visibilità dei getter poiché assumono sempre la stessa visibilità di quella della proprietà.)
Nell'articolo Kotlin Class and Objects, hai imparato a conoscere i modificatori di visibilità public
e private
in breve. Imparerai a conoscere altri due modificatori di visibilità protected
e internal
(oltre a public
e private
) in dettaglio.
Modificatori di visibilità all'interno del pacchetto
Un pacchetto organizza una serie di funzioni, proprietà e classi, oggetti e interfacce correlate. Letture consigliate: Pacchetti Kotlin
Modificatore | Descrizione |
---|---|
pubblico | le dichiarazioni sono visibili ovunque |
privato | visibile all'interno del file contenente la dichiarazione |
interno | visibile all'interno dello stesso modulo (un insieme di file Kotlin compilati insieme) |
protetto | non disponibile per i pacchetti (utilizzato per le sottoclassi) |
Nota: se il modificatore di visibilità non è specificato, è public
per impostazione predefinita.
Facciamo un esempio:
// nome file: hello.kt pacchetto test fun function1 () () // public per impostazione predefinita e visibile ovunque private fun function2 () () // visibile all'interno di hello.kt fun function3 interna () () // visibile all'interno del stesso modulo var name = "Foo" // visibile ovunque get () = campo // visibile all'interno di hello.kt (uguale alla sua proprietà) private set (value) (// visibile all'interno di hello.kt field = value) private class class1 () // visibile all'interno di hello.kt
Modificatori di visibilità all'interno di classi e interfacce
Ecco come funzionano i modificatori di visibilità per i membri (funzioni, proprietà) dichiarati all'interno di una classe:
Modificatore | Descrizione |
---|---|
pubblico | visibile a qualsiasi cliente che può vedere la classe dichiarante |
privato | visibile solo all'interno della classe |
protetto | visibile all'interno della classe e delle sue sottoclassi |
interno | visibile a qualsiasi client all'interno del modulo che può vedere la classe dichiarante |
Nota: se si sovrascrive un protected
membro nella classe derivata senza specificarne la visibilità, anche la sua visibilità sarà protected
.
Facciamo un esempio:
open class Base () (var a = 1 // public by default private var b = 2 // private to Base class protected open val c = 3 // visible to the Base and the Derived class internal val d = 4 // visible all'interno dello stesso modulo protected fun e () () // visibile alla classe Base e alla classe Derived) Derived: Base () (// a, c, d ed e () della classe Base sono visibili // b non è visibile sovrascrivere val c = 9 // c è protetto) fun main (args: Array) (val base = Base () // base.a e base.d sono visibili // base.b, base.c e base .e () non sono visibili val derivato = Derivato () // derivato.c non è visibile)
Modifica della visibilità di un costruttore
Per impostazione predefinita, la visibilità di un costruttore è public
. Tuttavia, puoi cambiarlo. Per questo, è necessario aggiungere esplicitamente la constructor
parola chiave.
Il costruttore è public
per impostazione predefinita nell'esempio seguente:
class Test (val a: Int) (// code)
Ecco come puoi modificarne la visibilità.
class Test costruttore privato (val a: Int) (// codice)
Ecco il costruttore private
.
Nota: in Kotlin, le funzioni, le variabili e le classi locali non possono avere modificatori di visibilità.