I den här artikeln lär du dig om alla fyra synlighetsmodifierarna i Kotlin och hur de fungerar i olika scenarier.
Synlighetsmodifierare är nyckelord som ställer in synligheten (tillgänglighet) för klasser, objekt, gränssnitt, konstruktörer, funktioner, egenskaper och deras setter. (Du kan inte ställa in visibilitetsmodifierare för getters eftersom de alltid har samma synlighet som egenskapens.)
I artikeln Kotlin Class and Objects lärde du dig om synlighetsmodifierare public
och private
i korthet. Du kommer att lära dig mer om två synlighetsmodifierare protected
och internal
(samt public
och private
) i detalj.
Siktmodifierare inuti paketet
Ett paket organiserar en uppsättning relaterade funktioner, egenskaper och klasser, objekt och gränssnitt. Rekommenderad läsning: Kotlin-paket
Modifierare | Beskrivning |
---|---|
offentlig | förklaringar är synliga överallt |
privat | synlig i filen som innehåller deklarationen |
inre | synlig i samma modul (en uppsättning Kotlin-filer sammanställda) |
skyddade | inte tillgängligt för paket (används för underklasser) |
Obs! Om synlighetsmodifieraren inte är angiven är den som public
standard.
Låt oss ta ett exempel:
// filnamn: hello.kt paket test rolig funktion1 () () // offentlig som standard och synlig överallt privat rolig funktion2 () () // synlig inuti hello.kt intern kul funktion3 () () // synlig inuti samma modul var namn = "Foo" // synlig överallt get () = fält // synligt inuti hello.kt (samma som dess egendom) privat uppsättning (värde) (// synligt inuti hello.kt fält = värde) privat klass class1 () // synlig inuti hello.kt
Synlighetsmodifierare inom klasser och gränssnitt
Så här fungerar synlighetsmodifierare för medlemmar (funktioner, egenskaper) som deklareras i en klass:
Modifierare | Beskrivning |
---|---|
offentlig | synlig för alla klienter som kan se deklareringsklassen |
privat | endast synlig i klassen |
skyddade | synlig i klassen och dess underklasser |
inre | synlig för alla klienter i modulen som kan se deklareringsklassen |
Obs! Om du åsidosätter en protected
medlem i den härledda klassen utan att ange dess synlighet, blir dess synlighet också protected
.
Låt oss ta ett exempel:
öppen klass Bas () (var a = 1 // offentlig som standard privat var b = 2 // privat till Basklass skyddad öppen val c = 3 // synlig för Basen och Den härledda klassen intern val d = 4 // synlig inuti samma modul skyddad fun e () () // synlig för basen och den härledda klassen) klassen härledd: basen () (// a, c, d och e () av basklassen är synliga // b är inte synlig åsidosätta val c = 9 // c är skyddad) fun main (args: Array) (val base = Base () // base.a och base.d är synliga // base.b, base.c och base .e () är inte synliga val härledda = härledda () // härledda.c är inte synliga)
Ändra en konstruktörs synlighet
Som standard är en konstruktors synlighet public
. Du kan dock ändra det. För det måste du uttryckligen lägga till constructor
nyckelord.
Konstruktören är som public
standard i exemplet nedan:
klass Test (val a: Int) (// kod)
Så här kan du ändra synligheten.
klass Testa privat konstruktör (val a: Int) (// kod)
Här är konstruktören private
.
Obs! I Kotlin kan lokala funktioner, variabler och klasser inte ha synlighetsmodifierare.