У цій статті ви дізнаєтесь про всі 4 модифікатори видимості в Котліні та про те, як вони працюють у різних сценаріях.
Модифікатори видимості - це ключові слова, які встановлюють видимість (доступність) класів, об’єктів, інтерфейсу, конструкторів, функцій, властивостей та їх установників. (Ви не можете встановити модифікатор видимості геттерів, оскільки вони завжди мають ту саму видимість, що і властивість.)
У Котлин класу і об'єкти статті ви дізналися про модифікаторів видимості public
і private
коротко. Ви дізнаєтесь ще про два модифікатори видимості protected
та internal
(а також public
та private
) докладно.
Модифікатори видимості всередині пакета
Пакет організовує набір пов’язаних функцій, властивостей та класів, об’єктів та інтерфейсів. Рекомендуємо прочитати: Пакети Kotlin
Модифікатор | Опис |
---|---|
громадськості | декларації видно скрізь |
приватний | видно всередині файлу, що містить декларацію |
внутрішній | видно всередині того самого модуля (набір файлів Kotlin, скомпільованих разом) |
захищений | недоступний для пакетів (використовується для підкласів) |
Примітка: Якщо модифікатор видимості не вказаний, це public
за замовчуванням.
Візьмемо приклад:
// ім'я файлу: тест пакета hello.kt fun fun1 () () // загальнодоступний і видимий скрізь private fun function2 () () // видимий всередині hello.kt внутрішній fun fun3 () () // видимий всередині той самий модуль var name = "Foo" // всюди видно get () = поле // видно всередині hello.kt (те саме, що і його властивість) приватний набір (значення) (// видно всередині hello.kt поле = значення) приватний клас class1 () // видно всередині hello.kt
Модифікатори видимості всередині класів та інтерфейсів
Ось як працюють модифікатори видимості для членів (функцій, властивостей), оголошених всередині класу:
Модифікатор | Опис |
---|---|
громадськості | видимий для будь-якого клієнта, який може бачити клас оголошення |
приватний | видно лише всередині класу |
захищений | видно всередині класу та його підкласів |
внутрішній | видимий для будь-якого клієнта всередині модуля, який може бачити клас оголошення |
Примітка: Якщо ви перевизначаєте protected
член у похідному класі, не вказуючи його видимість, його видимість також буде protected
.
Візьмемо приклад:
відкритий клас Base () (var a = 1 // відкритий за замовчуванням private var b = 2 // приватний для базового класу захищений відкритий val c = 3 // видимий для базового та похідного класу внутрішній val d = 4 // видимий всередині того самого модуля захищений fun 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 = Похідне () // похідне.c не видно)
Зміна видимості конструктора
За замовчуванням видимість конструктора становить public
. Однак ви можете його змінити. Для цього вам потрібно явно додати constructor
ключове слово.
Конструктор є public
типовим у прикладі нижче:
class Test (val a: Int) (// код)
Ось як ви можете змінити його видимість.
class Тест приватного конструктора (val a: Int) (// код)
Ось конструктор private
.
Примітка: У Kotlin локальні функції, змінні та класи не можуть мати модифікаторів видимості.