W tym artykule dowiesz się o wszystkich 4 modyfikatorach widoczności w Kotlinie oraz o tym, jak działają w różnych scenariuszach.
Modyfikatory widoczności to słowa kluczowe, które ustawiają widoczność (dostępność) klas, obiektów, interfejsu, konstruktorów, funkcji, właściwości i ich ustawiaczy. (Nie można ustawić modyfikatora widoczności metod pobierających, ponieważ zawsze mają one taką samą widoczność jak właściwość).
W artykule Kotlin Class and Objects dowiedziałeś się o modyfikatorach widoczności publici privatew skrócie. Dowiesz się o dwóch kolejnych modyfikatorach widoczności protectedi internal(a także publici private) szczegółowo.
Modyfikatory widoczności wewnątrz pakietu
Pakiet organizuje zestaw powiązanych funkcji, właściwości i klas, obiektów i interfejsów. Zalecana literatura: Pakiety Kotlin
| Modyfikator | Opis |
|---|---|
| publiczny | deklaracje są widoczne wszędzie |
| prywatny | widoczne wewnątrz pliku zawierającego deklarację |
| wewnętrzny | widoczne w tym samym module (zestaw plików Kotlin skompilowanych razem) |
| chroniony | niedostępne dla pakietów (używane dla podklas) |
Uwaga: Jeśli modyfikator widoczności nie jest określony, jest on publicustawiony domyślnie.
Weźmy przykład:
// nazwa pliku: hello.kt pakiet test fun function1 () () // domyślnie publiczny i widoczny wszędzie private fun function2 () () // widoczny wewnątrz hello.kt internal fun function3 () () // widoczny wewnątrz ten sam moduł var name = "Foo" // widoczne wszędzie get () = pole // widoczne wewnątrz hello.kt (tak samo jak jego własność) zestaw prywatny (wartość) (// widoczne wewnątrz hello.kt pole = wartość) klasa prywatna klasa1 () // widoczne wewnątrz hello.kt
Modyfikatory widoczności wewnątrz klas i interfejsów
Oto jak działają modyfikatory widoczności dla elementów członkowskich (funkcji, właściwości) zadeklarowanych wewnątrz klasy:
| Modyfikator | Opis |
|---|---|
| publiczny | widoczne dla każdego klienta, który może zobaczyć deklarowaną klasę |
| prywatny | widoczne tylko w klasie |
| chroniony | widoczne wewnątrz klasy i jej podklas |
| wewnętrzny | widoczne dla każdego klienta wewnątrz modułu, który może zobaczyć deklarującą klasę |
Uwaga: Jeśli przesłonisz element protectedczłonkowski w klasie pochodnej bez określania jego widoczności, jego widoczność również będzie protected.
Weźmy przykład:
open class Base () (var a = 1 // domyślnie public private var b = 2 // private to Base class protected open val c = 3 // widoczne dla bazy i klasy pochodnej wewnętrzne val d = 4 // widoczne wewnątrz tego samego modułu chronione fun e () () // widoczne dla klasy Base i Derived) Derived: Base () (// a, c, d i e () klasy Base są widoczne // b jest niewidoczne override val c = 9 // c jest chronione) fun main (args: Array) (val base = Base () // base.a i base.d są widoczne // base.b, base.c i base .e () nie są widoczne. val derived = Derived () // derived.c nie jest widoczne)
Zmiana widoczności konstruktora
Domyślnie widoczność konstruktora to public. Możesz to jednak zmienić. W tym celu musisz jawnie dodać constructorsłowo kluczowe.
Konstruktor jest publicdomyślnie w poniższym przykładzie:
class Test (val a: Int) (// kod)
Oto, jak możesz zmienić jego widoczność.
class Test prywatny konstruktor (val a: Int) (// kod)
Oto konstruktor private.
Uwaga: w Kotlinie lokalne funkcje, zmienne i klasy nie mogą mieć modyfikatorów widoczności.








