Kotlin-synlighedsmodifikatorer

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.

Interessante artikler...