В тази статия ще научите за всичките 4 модификатора на видимост в Kotlin и как те работят в различни сценарии.
Модификаторите на видимост са ключови думи, които задават видимостта (достъпността) на класове, обекти, интерфейс, конструктори, функции, свойства и техните задатели. (Не можете да зададете модификатор на видимостта на getters, тъй като те винаги имат същата видимост като тази на свойството.)
В Kotlin клас и обекти статия, сте научили за видимост модификатори public
и private
накратко. Ще научите за още два модификатора на видимостта protected
и internal
(както и public
и private
) в детайли.
Модификатори на видимостта Вътре в пакета
Пакетът организира набор от свързани функции, свойства и класове, обекти и интерфейси. Препоръчително четиво: Пакети Kotlin
Модификатор | Описание |
---|---|
публично | декларациите са видими навсякъде |
частни | видими във файла, съдържащ декларацията |
вътрешен | видими в същия модул (набор от Kotlin файлове, компилирани заедно) |
защитен | не се предлага за пакети (използва се за подкласове) |
Забележка: Ако модификаторът на видимост не е посочен, той е public
по подразбиране.
Да вземем пример:
// име на файл: hello.kt пакет тест fun fun1 () () // публичен по подразбиране и видим навсякъде private fun function2 () () // видим вътре hello.kt вътрешна функция fun3 () () // видим вътре в същият модул var name = "Foo" // видим навсякъде get () = поле // видим вътре hello.kt (същото като неговото свойство) private set (value) (// видим вътре hello.kt field = value) private class class1 () // видимо вътре hello.kt
Модификатори на видимостта вътре в класове и интерфейси
Ето как работят модификаторите на видимост за членове (функции, свойства), декларирани в клас:
Модификатор | Описание |
---|---|
публично | видим за всеки клиент, който може да види деклариращия клас |
частни | видими само в класа |
защитен | видими в класа и неговите подкласове |
вътрешен | видим за всеки клиент вътре в модула, който може да види класа на деклариране |
Забележка: Ако замените protected
член в производния клас, без да посочите неговата видимост, неговата видимост също ще бъде protected
.
Да вземем пример:
отворен клас Base () (var a = 1 // публичен по подразбиране private var b = 2 // частен към Base клас защитен отворен val c = 3 // видим за базовия и производния клас вътрешен val d = 4 // видим вътре в същия модул защитено забавление e () () // видимо за класа на Base и Derived) Производно: Base () (// a, c, d и e () на базовия клас са видими // b не се вижда замяна val c = 9 // c е защитен) fun main (args: Array) (val base = Base () // base.a и base.d са видими // base.b, base.c и base .e () не са видими val deriva = Derived () // deriva.c не се вижда)
Промяна на видимостта на конструктор
По подразбиране видимостта на конструктор е public
. Можете обаче да го промените. За това трябва изрично да добавите constructor
ключова дума.
Конструкторът е public
по подразбиране в примера по-долу:
class Test (val a: Int) (// код)
Ето как можете да промените видимостта му.
class Тест на частен конструктор (val a: Int) (// код)
Тук е конструкторът private
.
Забележка: В Kotlin локалните функции, променливи и класове не могат да имат модификатори на видимостта.