Модификаторы видимости Котлина

В этой статье вы узнаете обо всех 4 модификаторах видимости в Kotlin и о том, как они работают в разных сценариях.

Модификаторы видимости - это ключевые слова, которые устанавливают видимость (доступность) классов, объектов, интерфейса, конструкторов, функций, свойств и их установщиков. (Вы не можете установить модификатор видимости геттеров, поскольку они всегда принимают ту же видимость, что и свойство.)

В Котлин класса и объекты статье вы узнали о модификаторов видимости publicи privateвкратце. Вы узнаете еще о двух модификаторах видимости protectedи internal(а также о publicи private) более подробно.

Модификаторы видимости внутри пакета

Пакет организует набор связанных функций, свойств и классов, объектов и интерфейсов. Рекомендуемая литература: Пакеты Kotlin

Модификатор Описание
общественный объявления видны везде
частный виден внутри файла, содержащего объявление
внутренний видимый внутри того же модуля (набор файлов Kotlin, скомпилированных вместе)
защищенный недоступно для пакетов (используется для подклассов)

Примечание. Если модификатор видимости не указан, он используется publicпо умолчанию.

Возьмем пример:

 // имя файла: hello.kt package test fun function1 () () // общедоступный по умолчанию и видимый везде private fun function2 () () // видимый внутри hello.kt internal fun function3 () () // видимый внутри тот же модуль var name = "Foo" // видим везде get () = field // видим внутри hello.kt (как и его свойство) private set (value) (// видим внутри hello.kt field = value) private class class1 () // видим внутри hello.kt

Модификаторы видимости внутри классов и интерфейсов

Вот как модификаторы видимости работают для членов (функций, свойств), объявленных внутри класса:

Модификатор Описание
общественный виден любому клиенту, который может видеть объявляющий класс
частный виден только внутри класса
защищенный видимый внутри класса и его подклассов
внутренний видимый для любого клиента внутри модуля, который может видеть объявляющий класс

Примечание. Если вы переопределите protectedчлен в производном классе без указания его видимости, его видимость также будет protected.

Возьмем пример:

 open class Base () (var a = 1 // общедоступный по умолчанию private var b = 2 // закрытый для базового класса защищенный открытый val c = 3 // видимый для базового и производного класса внутренний val d = 4 // видимый внутри одного модуля protected fun e () () // видимый для базового и производного классов) class Derived: Base () (// a, c, d и e () базового класса видны // b не отображается override val c = 9 // c защищен) fun main (args: Array) (val base = Base () // base.a и base.d видны // base.b, base.c и base .e () не видны val производные = Derived () // производные .c не видны) 

Изменение видимости конструктора

По умолчанию видимость конструктора равна public. Однако вы можете это изменить. Для этого вам нужно явно добавить constructorключевое слово.

В publicпримере ниже конструктор по умолчанию:

 class Test (val a: Int) (// код) 

Вот как вы можете изменить его видимость.

 class Test частный конструктор (val a: Int) (// код)

Вот конструктор private.

Примечание. В Kotlin локальные функции, переменные и классы не могут иметь модификаторы видимости.

Интересные статьи...