Kotlin в IntelliJ IDEA Kotlin змінні Kotlin типи даних Kotlin операції з числами Kotlin умовні вирази Kotlin умовні конструкції Kotlin цикли Kotlin послідовності Kotlin масиви Kotlin функціональне програмування Kotlin змінна кількість параметрів. Vararg Kotlin повернення результату. оператор return Kotlin однорядкові і локальні функції Kotlin перевантаження функцій Kotlin Лямбда-вирази Kotlin функції вищого порядку Kotlin Анонімні функції Kotlin ООП Класи і об'єкти Kotlin ООП властивості Kotlin ООП конструктор Kotlin ООП функції в класах Kotlin ООП Пакети та імпорт Kotlin ООП модифікатори видимості Kotlin ООП вкладені класи Kotlin ООП інтерфейси Kotlin ООП спадкування Kotlin ООП Перевизначення методів і властивостей Kotlin ООП Абстрактні класи та методи Kotlin ООП Data-класи Kotlin ООП перерахування enums Kotlin ООП Null і nullable-типи Kotlin ООП Обробка винятків Kotlin ООП перетворення типів Kotlin ООП Інфіксна функція Kotlin ООП функції розширення Kotlin ООП Узагальнені класи і функції Kotlin ООП обмеження узагальнень Kotlin ООП Варіантність, коваріантність і контраваріантність Kotlin Колекції. Змінювані і незмінні колекції Kotlin Колекції. LIST список Kotlin Колекції. Set Kotlin Колекції. Map

Kotlin ООП модифікатори видимості


Усі застосовувані, а також компоненти типів (класи, об'єкти, інтерфейси, конструктори, функції, властивості і їх сеттери) мають певний рівень видимості, який визначається модифікатором видимості (модифікатором доступу). Модифікатор видимості визначає, де ті чи інші типи і їх компоненти доступні і де їх можна використовувати. У Kotlin є такі модифікатори видимості:

  • private : класи, об'єкти, інтерфейси, а також функції та властивості, певні поза класом, з цим модифікатором видно тільки в тому файлі, в якому вони визначені. Члени класу з цим модифікатором видно тільки в рамках свого класу

  • protected : члени класу з цим модифікатором видно в класі, в якому вони визначені, і в класах-спадкоємців

  • internal : класи, об'єкти, інтерфейси, функції, властивості, конструктори з цим модифікатором видно в будь-якій частині модуля, в якому вони визначені. Модуль представляє набір файлів Kotlin, скомпільованих разом в одну структурну одиницю. Це може бути модуль IntelliJ IDEA або проект Maven

  • public : класи, функції, властивості, об'єкти, інтерфейси з цим модифікатором видно в будь-якій частині програми. (При цьому якщо функції або класи з цим модифікатором визначені в іншому пакеті їх все одно потрібно імпортувати)

Якщо модифікатор видимості явно не вказано, то застосовується модифікатор public

Приклад застосування модифікаторів в пакеті:

 

package example
 
fun sayHello() {} // функция видна везде, так как модификатор по умолчанию - public
 
private fun display() {} // функция видна только в текущем файле
 
internal val weight = 6    // переменная видна в пределах модуля
 
public var age: Int = 18 // свойство видно в любой части программы
    private set         // но сеттер доступен только в пределах этого же файла
 
private class Person    // класс доступен только в пределах этого же файла
{ }

Для установки рівня видимості модифікатор ставиться перед ключовими словами class / var / val / fun / set на самому початку визначення класу / властивості / змінної / функції / сетера.

Використання модифікаторів в класі:

class Person(_name: String, _id: Int){
 
    var name: String        // свойство публичное и видно везде
        private set         // сеттер доступен только внутри этого класса
     
    private val id: Int   // свойство доступно из этого класса
 
    internal fun display(){   // функция видна в текущем модуле
        println("Id: $id  Name: $name")
    }
 
    init {
        name = _name
        id = _id
    }
}

Якщо властивості встановлюються через конструктор, то в конструкторі у властивостей також можна вказати модифікатор видимості:

class Person(internal val name: String, private val id: Int){
     
    internal fun display(){   // функция видна в текущем модуле
        println("Id: $id  Name: $name")
    }
}

Також можна вказати модифікатор у конструкторів, наприклад, ми хочемо зробити конструктор класу закритим (тобто з модифікатором private):

class User private constructor(val name: String){
     
    var age: Int = 0
     
    internal constructor(name: String, _age: Int): this(name){
        age = _age
    }
}

В даному випадку первинний конструктор є приватним, тому він доступний тільки з цього ж класу, наприклад, при виклику вторинного конструктора. Відповідно ззовні, щоб створити об'єкт даного класу, можна використовувати тільки вторинний конструктор:

val bob = User("Bob", 23)

Також варто враховувати, що для локальних змінних і функцій (тобто таких змінних і функцій, которе визначені всередині іншої функції), модифікатор видимості встановити не можна. Локальні змінні і функції доступні тільки в межах тієї функції, в якій вони визначені.


Наш партнер:
beta test mp3 playlist downloader