Котлин Модификаторы видимости – public, protected, internal, private

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

Модификаторы видимости Kotlin

Модификаторы видимости – это модификаторы, которые, добавленные к классу/интерфейсу/свойству/функции в Kotlin, определяют, где они видимы и откуда они могут быть доступны. Установщики свойств в Kotlin могут иметь отдельный модификатор от самого свойства. У получателей не может быть определен модификатор видимости. Они используют тот же модификатор, что и свойство. Ниже приведены модификаторы видимости:

  • public
  • protected
  • internal
  • private

Публичный модификатор

A Public Modifier is the default modifier in Kotlin. Just like the Java public modifier, it means that the declaration is visible everywhere.


class Hello{
}

public class H{
}

fun hi()
public fun hello()

val i = 0
public val j = 5

Все вышеперечисленные объявления находятся на верхнем уровне файла. ВСЕ они являются общедоступными. Если мы не указываем объявление членов класса, они являются общедоступными (если они не переопределены).

Модификатор защищенного доступа

A Protected Modifier in Kotlin: CANNOT be set on top-level declarations. Declarations that are protected in a class, can be accessed only in their subclasses.

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.

Внутренний модификатор

Внутренний – новый модификатор, доступный в Kotlin, которого нет в Java. Установка объявления как внутреннего означает, что оно будет доступно только в том же модуле. Под модулем в Kotlin мы понимаем группу файлов, которые компилируются вместе.

internal class A {
}

internal val x = 0

Они не будут видны за пределами текущего модуля. Внутренние модификаторы полезны, когда вам нужно скрыть конкретные реализации библиотек от пользователей. Это было невозможно с использованием видимости package-private в 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 is visibile only from inside its class. We can set private constructors in the following way:

class PRIV private constructor(a: String) {
 ... 
}

По умолчанию классы имеют публичные конструкторы. Где бы ни находился класс, за ним следует конструктор. Нам нужно установить модификатор видимости на конструкторе уже в его определении. Таким образом, Kotlin использует модификаторы protected и internal по-разному от Java. Кроме того, модификатор по умолчанию в Java является пакетно-приватным, чего нет в Kotlin, пока что. Это завершает этот быстрый учебник по модификаторам видимости в Kotlin.

Source:
https://www.digitalocean.com/community/tutorials/kotlin-visibility-modifiers-public-protected-internal-private