I denne artikkelen vil du lære om alle de 4 synlighetsendringene i Kotlin og hvordan de fungerer i forskjellige scenarier.
Synlighetsmodifikatorer er nøkkelord som angir synlighet (tilgjengelighet) for klasser, objekter, grensesnitt, konstruktører, funksjoner, egenskaper og deres setter. (Du kan ikke angi siktemodifikator for getters, ettersom de alltid har samme synlighet som for eiendommen.)
I Kotlin Class and Objects-artikkelen lærte du om synlighetsendringer public
og private
i korte trekk. Du vil lære om to andre synlighetsmodifikatorer protected
og internal
(samt public
og private
) i detalj.
Siktmodifikatorer inne i pakken
En pakke organiserer et sett med relaterte funksjoner, egenskaper og klasser, objekter og grensesnitt. Anbefalt lesing: Kotlin-pakker
Modifikator | Beskrivelse |
---|---|
offentlig | erklæringer er synlige overalt |
privat | synlig i filen som inneholder erklæringen |
innvendig | synlig i samme modul (et sett med Kotlin-filer samlet sammen) |
beskyttet | ikke tilgjengelig for pakker (brukes til underklasser) |
Merk: Hvis synlighetsmodifikator ikke er spesifisert, er det som public
standard.
La oss ta et eksempel:
// filnavn: hello.kt pakke test morsom funksjon1 () () // offentlig som standard og synlig overalt privat moro funksjon2 () () // synlig inne hello.kt intern moro funksjon3 () () // synlig inne i samme modul var navn = "Foo" // synlig overalt get () = felt // synlig inne hello.kt (samme som eiendommen) privat sett (verdi) (// synlig inne i hello.kt felt = verdi) privat klasse klasse1 () // synlig inne hello.kt
Synlighetsmodifikatorer i klasser og grensesnitt
Slik fungerer synlighetsmodifikatorer for medlemmer (funksjoner, egenskaper) deklarert i en klasse:
Modifikator | Beskrivelse |
---|---|
offentlig | synlig for enhver klient som kan se den erklærende klassen |
privat | kun synlig i klassen |
beskyttet | synlig inne i klassen og dens underklasser |
innvendig | synlig for enhver klient i modulen som kan se deklarerende klasse |
Merk: Hvis du overstyrer et protected
medlem i den avledede klassen uten å spesifisere synligheten, vil det også være synlighet protected
.
La oss ta et eksempel:
åpen klasse Base () (var a = 1 // offentlig som standard privat var b = 2 // privat til baseklasse beskyttet åpen val c = 3 // synlig for basen og Den avledede klassen intern val d = 4 // synlig inne i den samme modulen beskyttet moro e () () // synlig for basen og den avledede klassen) klassen avledet: Base () (// a, c, d og e () av baseklassen er synlig // b er ikke synlig overstyr val c = 9 // c er beskyttet) morsom main (args: Array) (val base = Base () // base.a og base.d er synlig // base.b, base.c og base .e () er ikke synlig val avledet = Avledet () // derivert.c er ikke synlig)
Endring av en konstruktørs synlighet
Som standard er synligheten til en konstruktør public
. Du kan imidlertid endre det. For det må du eksplisitt legge til constructor
nøkkelord.
Konstruktøren er public
som standard i eksemplet nedenfor:
klasse Test (val a: Int) (// kode)
Slik kan du endre synligheten.
klasse Test privat konstruktør (val a: Int) (// kode)
Her er konstruktøren private
.
Merk: I Kotlin kan lokale funksjoner, variabler og klasser ikke ha synlighetsmodifikatorer.