V tomto článku se dozvíte o všech 4 modifikátorech viditelnosti v Kotlin a o tom, jak fungují v různých scénářích.
Modifikátory viditelnosti jsou klíčová slova, která nastavují viditelnost (přístupnost) tříd, objektů, rozhraní, konstruktorů, funkcí, vlastností a jejich nastavovačů. (Nelze nastavit modifikátor viditelnosti getrů, protože vždy mají stejnou viditelnost jako vlastnost.)
V Kotlin třídy a objekty článku jste se dozvěděli o modifikátory viditelnosti public
a private
ve stručnosti. Dozvíte se o dalších dvou modifikátorech viditelnosti protected
a internal
(stejně jako public
a private
) podrobně.
Modifikátory viditelnosti uvnitř balíčku
Balíček organizuje sadu souvisejících funkcí, vlastností a tříd, objektů a rozhraní. Doporučené čtení: Kotlin Packages
Modifikátor | Popis |
---|---|
veřejnost | prohlášení jsou viditelná všude |
soukromé | viditelné uvnitř souboru obsahujícího prohlášení |
vnitřní | viditelné uvnitř stejného modulu (sada souborů Kotlin sestavená společně) |
chráněný | není k dispozici pro balíčky (používá se pro podtřídy) |
Poznámka: Pokud není zadán modifikátor viditelnosti, je public
ve výchozím nastavení.
Vezměme si příklad:
// název souboru: hello.kt balíček test fun fun1 () () // ve výchozím nastavení veřejné a viditelné všude soukromá fun function2 () () // viditelné uvnitř hello.kt interní fun funkce3 () () // viditelné uvnitř stejný modul var name = "Foo" // viditelné všude get () = pole // viditelné uvnitř hello.kt (stejné jako jeho vlastnost) soukromá sada (hodnota) (// viditelné uvnitř hello.kt pole = hodnota) soukromá třída třída1 () // viditelné uvnitř hello.kt
Modifikátory viditelnosti uvnitř tříd a rozhraní
Takto fungují modifikátory viditelnosti pro členy (funkce, vlastnosti) deklarované uvnitř třídy:
Modifikátor | Popis |
---|---|
veřejnost | viditelné pro každého klienta, který může vidět deklarační třídu |
soukromé | viditelné pouze uvnitř třídy |
chráněný | viditelné uvnitř třídy a jejích podtříd |
vnitřní | viditelné pro libovolného klienta uvnitř modulu, který může vidět deklarující třídu |
Poznámka: Pokud přepíšete protected
člena v odvozené třídě bez určení jeho viditelnosti, jeho viditelnost bude také protected
.
Vezměme si příklad:
open class Base () (var a = 1 // public by default private var b = 2 // private to Base class protected open val c = 3 // visible to the Base and the Derived class internal val d = 4 // visible uvnitř stejného modulu chráněné fun e () () // viditelné pro třídu Base a odvozenou třídu Derived: Base () (// a, c, d a e () třídy Base jsou viditelné // b není viditelné přepsat val c = 9 // c je chráněn) fun main (args: Array) (val base = Base () // base.a a base.d jsou viditelné // base.b, base.c a base .e () nejsou viditelné val odvozeno = Derived () // derived.c není viditelné)
Změna viditelnosti konstruktéra
Ve výchozím nastavení je viditelnost konstruktoru public
. Můžete to však změnit. K tomu musíte explicitně přidat constructor
klíčové slovo.
Konstruktor je public
ve výchozím nastavení v příkladu níže:
test třídy (hodnota a: Int) (// kód)
Zde můžete změnit jeho viditelnost.
třída Test soukromého konstruktoru (val a: Int) (// kód)
Tady je konstruktor private
.
Poznámka: V Kotlinu nemohou mít lokální funkce, proměnné a třídy modifikátory viditelnosti.