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 publicog privatei korte træk. Du vil lære om yderligere to synlighedsmodifikatorer protectedog internal(samt publicog 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 publicsom 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 protectedmedlem 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 constructornøgleord.
Konstruktøren er publicsom 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.








