Spec-Zone.ru › Kotlin 2

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

Классы, объекты, интерфейсы, конструкторы и функции, а также свойства и их сеттеры могут иметь модификаторы видимости. Геттеры всегда имеют ту же видимость, что и их свойства.

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

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

Пакеты

Функции, свойства, классы, объекты и интерфейсы можно объявлять на «верхнем уровне» непосредственно внутри пакета:

// file name: example.kt
package foo

fun baz() { ... }
class Bar { ... }
  • Если не использовать модификатор видимости, по умолчанию применяется public, а значит, объявления будут видны везде.

  • Если пометить объявление как private, оно будет видно только внутри файла, содержащего это объявление.

  • Если пометить его как internal, оно будет видно везде в том же модуле.

  • Модификатор protected недоступен для объявлений верхнего уровня.

Чтобы использовать видимое объявление верхнего уровня из другого пакета, его нужно импортировать.

Примеры:

// file name: example.kt
package foo

private fun foo() { ... } // visible inside example.kt

public var bar: Int = 5 // property is visible everywhere
    private set         // setter is visible only in example.kt
    
internal val baz = 6    // visible inside the same module

Члены класса

Для членов, объявленных внутри класса:

  • private означает, что член виден только внутри этого класса (включая все его члены).

  • protected означает, что член имеет ту же видимость, что и член, помеченный как private, но также виден в подклассах.

  • internal означает, что любой клиент внутри этого модуля, который видит объявляющий класс, видит и его члены internal.

  • public означает, что любой клиент, который видит объявляющий класс, видит и его члены public.

В Kotlin внешний класс не видит закрытые члены своих внутренних классов.

Если переопределить член protected или internal и явно не указать видимость, переопределяющий член также будет иметь ту же видимость, что и исходный.

Примеры:

open class Outer {
    private val a = 1
    protected open val b = 2
    internal open val c = 3
    val d = 4  // public by default
    
    protected class Nested {
        public val e: Int = 5
    }
}

class Subclass : Outer() {
    // a is not visible
    // b, c and d are visible
    // Nested and e are visible

    override val b = 5   // 'b' is protected
    override val c = 7   // 'c' is internal
}

class Unrelated(o: Outer) {
    // o.a, o.b are not visible
    // o.c and o.d are visible (same module)
    // Outer.Nested is not visible, and Nested::e is not visible either 
}

Конструкторы

Используйте следующий синтаксис, чтобы указать видимость первичного конструктора класса:

Необходимо добавить явное ключевое слово constructor.

class C private constructor(a: Int) { ... }

В этом примере конструктор имеет видимость private. По умолчанию все конструкторы имеют видимость public, что фактически означает, что они видны везде, где виден класс (то есть конструктор класса internal виден только внутри того же модуля).

Для запечатанных классов по умолчанию конструкторы имеют видимость protected. Подробнее см. в разделе Запечатанные классы.

Локальные объявления

Локальные переменные, функции и классы не могут иметь модификаторы видимости.

Модули

Модификатор видимости internal означает, что член виден в пределах того же модуля. Точнее, модуль — это набор файлов Kotlin, компилируемых вместе, например:

  • Модуль IntelliJ IDEA.

  • Проект Maven.

  • Набор исходного кода Gradle (за исключением того, что набор исходного кода test может обращаться к внутренним объявлениям main).

13 ноября 2025 г.
АннотацииСоглашения о стиле кодирования

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/visibility-modifiers.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API