Модификаторы видимости или доступа — это ключевые слова, которые используются для ограничения использования класса, интерфейса, методов и свойств Kotlin в приложении. Эти модификаторы используются в нескольких местах, таких как заголовок класса или тело метода.
В Kotlin модификаторы видимости делятся на четыре разных типа:
- public
- protected
- internal
- private
Модификатор public
Публичный модификатор доступен из любой точки проекта. Это модификатор по умолчанию в Kotlin. Если какой-либо класс, интерфейс и т. д. не указаны с каким-либо модификатором доступа, то этот класс, интерфейс и т. д. используются в общедоступной области.
public class Example{
}
class Demo{
}
public fun hello()
fun demo()
public val x = 5
val y = 10
Все публичные объявления могут быть размещены в верхней части файла. Если член класса не указан, то по умолчанию он общедоступен.
protected модификатор
Защищенный модификатор с классом или интерфейсом позволяет видеть только его класс или подкласс. Защищенное объявление (при переопределении) в его подклассе также является protected модификатором, если оно не изменено явно.
open class Base{
protected val i = 0
}
class Derived : Base(){
fun getValue() : Int
{
return i
}
}
В Kotlin модификатор protected не может быть объявлен на верхнем уровне.
Переопределение защищенных типов
open class Base{
open protected val i = 5
}
class Another : Base(){
fun getValue() : Int
{
return i
}
override val i =10
}
internal модификатор
Внутренние модификаторы недавно добавлены в Kotlin, они недоступны в Java. Объявление чего-либо делает это поле помеченным как внутреннее поле. Модификатор internal делает поле видимым только внутри модуля, в котором оно реализовано.
internal class Example{
internal val x = 5
internal fun getValue(){
}
}
internal val y = 10
Выше все поля объявлены как внутренние, которые доступны только внутри модуля, в котором они реализованы.
private в Kotlin
Частный модификатор private в Котлин позволяет сделать объявление доступным только внутри блока, в котором объявлены свойства, поля и т. д. Объявление частного модификатора не позволяет получить доступ за пределами области видимости. Частный пакет может быть доступен в этом конкретном файле.
private class Example {
private val x = 1
private valdoSomething() {
}
}
В приведенном выше примере класса val x и функция doSomthing() объявлены как частные. Класс «Example» доступен из того же исходного файла, «val x» и «fun doSomthing()» доступны в классе «Example».
Пример модификатора видимости
open class Base() {
var a = 1 // public by default
private var b = 2 // private to Base class
protected open val c = 3 // visible to the Base and the Derived class
internal val d = 4 // visible inside the same module
protected fun e() { } // visible to the Base and the Derived class
}
class Derived: Base() {
// a, c, d, and e() of the Base class are visible
// b is not visible
override val c = 9 // c is protected
}
fun main(args: Array) {
val base = Base()
// base.a and base.d are visible
// base.b, base.c and base.e() are not visible
val derived = Derived()
// derived.c is not visible
}
