Поиск по сайту:

Модификаторы видимости 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.