Модификаторы видимости Kotlin — общедоступные, защищенные, внутренние, частные
В этом уроке мы обсудим различные модификаторы видимости, доступные в программировании на Kotlin.
Модификаторы видимости Kotlin
Модификаторы видимости — это модификаторы, которые при добавлении к классу/интерфейсу/свойству/функции в Kotlin определяют, где все это видно и откуда ко всему этому можно получить доступ. У сеттеров свойств в Kotlin может быть модификатор, отдельный от свойства. У геттеров не может быть определен модификатор видимости. Они используют тот же модификатор, что и свойство. Ниже приведены модификаторы видимости:
- общедоступно
- защищено
- внутренний
- частное
Публичный модификатор
Публичный модификатор — это модификатор по умолчанию в Kotlin. Как и модификатор public в Java, это означает, что объявление видно везде.
class Hello{
}
public class H{
}
fun hi()
public fun hello()
val i = 0
public val j = 5
Все приведенные выше объявления находятся на верхнем уровне файла. ВСЕ общедоступны. Если мы не упомянем объявление членов класса, они общедоступны (если только они не переопределены).
Защищенный модификатор

open class Pr{
protected val i = 0
}
class Another : Pr{
fun iValue() : Int
{
return i
}
}
Классы, которые не являются подклассом Pr, не могут получить доступ к объявлениям i
, которые защищены, при переопределении они будут иметь тот же защищенный модификатор в подклассе, если вы не измените их явно.
open class Pr{
open protected val i = 0
}
class Another : Pr(){
fun iValue() : Int
{
return i
}
override val i = 5 //protected visibility
}
Концепция защищенных модификаторов в Kotlin, определенная выше, отличается от концепции в Java.
Внутренний модификатор
Internal — это новый модификатор, доступный в Kotlin, которого нет в Java. Установка объявления как внутреннего означает, что оно будет доступно только в том же модуле. Под модулем в Kotlin мы подразумеваем группу файлов, которые компилируются вместе.
internal class A {
}
internal val x = 0
Они не будут видны за пределами текущего модуля. Внутренние модификаторы полезны, когда вам нужно скрыть определенные реализации библиотеки от пользователей. Это было невозможно с использованием видимости пакета в Java.
Частные модификаторы
Частные модификаторы не позволяют объявлениям быть видимыми за пределами текущей области.
var setterVisibility: String = "abc"
private set
open class Pr{
open protected val i = 0
fun iValue() : Int
{
setterVisibility = 10
return setterVisibility
}
}
Поскольку kotlin допускает несколько определений верхнего уровня, приведенный выше код работает. Ниже нет
private open class ABC{
private val x = 6
}
private class BDE : ABC()
{
fun getX()
{
return x //x cannot be accessed here.
}
}
x виден только внутри своего класса. Мы можем установить частные конструкторы следующим образом:
class PRIV private constructor(a: String) {
...
}
По умолчанию классы имеют общедоступные конструкторы. Куда бы ни шел класс, за ним следует конструктор. Нам нужно установить модификатор видимости для конструктора в самом определении. Таким образом, Kotlin использует защищенные и внутренние модификаторы не так, как Java. Также модификатор Java по умолчанию — package-private, которого пока нет в Kotlin. На этом мы заканчиваем этот краткий урок по модификаторам видимости в Kotlin.