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 public
i private
w skrócie. Dowiesz się o dwóch kolejnych modyfikatorach widoczności protected
i internal
(a także public
i 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 public
ustawiony 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 protected
czł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ć constructor
słowo kluczowe.
Konstruktor jest public
domyś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.