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

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

https://t.me/android_its

Введение

Модификаторы видимости — это ключевые слова, которыми определяется уровень доступности элементов: классов, объектов, интерфейсов, конструкторов, функций, свойств и их сеттеров.


В Kotlin имеется четыре модификатора видимости. А в Java их три: недоступен internal. В Kotlin видимость по умолчанию —  public, в Java —  private.

1. Public доступен отовсюду.

2. Private  — только из класса, в котором определен (даже в дочерних классах).

3. Protected  — только в своем классе и классах, от которых унаследован.

4. Internal  — это переменная видимости: в модуле значение делается public, а вне модуля — private. Применяется при написании библиотеки: значения используются в ней везде, а при переключении на другой модуль вне ее доступа к значению не желателен. Ведь, чтобы зарабатывать на библиотеке, к функциям, которые мы пишем, не должно быть прямого доступа извне.

Рассмотрим модификаторы видимости на примерах:

open class Company() {
    var name = "Company"               // public по умолчанию
    private var androidDev = 2         // private для класса Company
    protected open val iosDev = 3      // видимый для Company и класса Huawei
    internal val flutterDev = 4        // виден внутри того же модуля

    protected fun getSalary() { }     // видимый для Company и класса Huawei
}

class Huawei: Company() {

    /**
     * name, iosDev, flutterDev и getSalary() класса Company видны
     * androidDev не виден
     */
    
    override val iosDev = 9        // c — protected, виден в дочернем классе
}

fun main() {
    val company = Company()
    /**
     * company.name и company.flutterDev видны.
     * company.androidDev, company.iosDev и company.getSalary() не видны
     */
   
    
    
    val huawei = Huawei()
    /**
     * huawei.iosDev не виден
     * huawei.name и huawei.flutterDev видны.
     */
    
}

В классе Company значения определены четырьмя разными модификаторами. Чтобы лучше видеть статус этих четырех значений, наследуем этот класс от класса Huawei.


В дочернем классе Huawei доступ получен ко всем значениям, кроме private.

А из созданного в функции main объекта класса Company  — лишь к значениям public и internal. Из созданного там же объекта класса Huawei доступ не получен к значению protected.

Определение независимого значения и функции как верхнего уровня принимает все переменные видимости, кроме protected:

Это и логично: у значения или функции никогда не будет дочернего класса.

Заключение

Итак, в Kotlin четыре модификатора видимости. Если модификатор не указан, по умолчанию используется public. В различных сценариях они применяются по-разному. Нужно определить, какую переменную видимости использовать, и записать ее в соответствии с конкретной ситуацией.

Читать


Report Page