В этом учебном пособии мы будем обсуждать различные модификаторы видимости, доступные в программировании на 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.