I denne artikel lærer du om alle 4 synlighedsmodifikatorer i Kotlin, og hvordan de fungerer i forskellige scenarier.
Synlighedsmodifikatorer er nøgleord, der indstiller synligheden (tilgængelighed) for klasser, objekter, grænseflade, konstruktører, funktioner, egenskaber og deres sættere. (Du kan ikke indstille synlighedsmodifikator for getters, da de altid har samme synlighed som ejendommens.)
I Kotlin Class and Objects-artiklen lærte du om synlighedsmodifikatorer public
og private
i korte træk. Du vil lære om yderligere to synlighedsmodifikatorer protected
og internal
(samt public
og private
) i detaljer.
Synlighedsmodifikatorer inde i pakken
En pakke organiserer et sæt relaterede funktioner, egenskaber og klasser, objekter og grænseflader. Anbefalet læsning: Kotlin-pakker
Modifikator | Beskrivelse |
---|---|
offentlig | erklæringer er synlige overalt |
privat | synlig inde i filen, der indeholder erklæringen |
indre | synlig inde i det samme modul (et sæt Kotlin-filer samlet) |
beskyttet | ikke tilgængelig for pakker (bruges til underklasser) |
Bemærk: Hvis synlighedsmodifikator ikke er angivet, er det public
som standard.
Lad os tage et eksempel:
// filnavn: hello.kt pakke test sjov funktion1 () () // offentlig som standard og synlig overalt privat sjov funktion2 () () // synlig inde hello.kt intern sjov funktion3 () () // synlig inde i samme modul var navn = "Foo" // synlig overalt get () = felt // synligt inde i hello.kt (samme som dets egenskab) privat sæt (værdi) (// synligt inden i hello.kt felt = værdi) privat klasse klasse1 () // synlig inde hello.kt
Synlighedsmodifikatorer inde i klasser og grænseflader
Sådan fungerer synlighedsmodifikatorer for medlemmer (funktioner, egenskaber), der er erklæret i en klasse:
Modifikator | Beskrivelse |
---|---|
offentlig | synlig for enhver klient, der kan se den erklærende klasse |
privat | kun synlig inden for klassen |
beskyttet | synlig inde i klassen og dens underklasser |
indre | synlig for enhver klient inde i modulet, der kan se den erklærende klasse |
Bemærk: Hvis du tilsidesætter et protected
medlem i den afledte klasse uden at specificere dets synlighed, vil dets synlighed også være protected
.
Lad os tage et eksempel:
åben klasse Base () (var a = 1 // offentlig som standard privat var b = 2 // privat til baseklasse beskyttet åben val c = 3 // synlig for basen og den afledte klasse intern val d = 4 // synlig inde i det samme modul er beskyttet fun e () () // synlig for basen og afledt klasse) klasse Afledt: Base () (// a, c, d og e () af baseklassen er synlig // b er ikke synlig tilsidesættelse val c = 9 // c er beskyttet) fun main (args: Array) (val base = Base () // base.a og base.d er synlige // base.b, base.c og base .e () er ikke synlige val afledt = Afledt () // afledt.c er ikke synlig)
Ændring af en konstruktørs synlighed
Som standard er en konstruktørs synlighed public
. Du kan dog ændre det. Til det skal du eksplicit tilføje constructor
nøgleord.
Konstruktøren er public
som standard i eksemplet nedenfor:
klasse Test (val a: Int) (// kode)
Sådan kan du ændre dens synlighed.
klasse Test privat konstruktør (val a: Int) (// kode)
Her er konstruktøren private
.
Bemærk: I Kotlin kan lokale funktioner, variabler og klasser ikke have synlighedsændringer.