ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Kotlin 可见性修饰符 > 原文: [https://www.programiz.com/kotlin-programming/visibility-modifiers](https://www.programiz.com/kotlin-programming/visibility-modifiers) #### 在本文中,您将了解 Kotlin 中的所有 4 种可见性修饰符,以及它们在不同情况下的工作方式。 可见性修饰符是用于设置类,对象,接口,构造器,函数,属性及其设置程序的可见性(可见性)的关键字。 (您无法设置获取器的可见性修饰符,因为它们始终具有与属性相同的可见性。) 在 [Kotlin 类和对象](/kotlin-programming/class-objects "Kotlin Class and Objects")文章中,您简要了解了可见性修饰符`public`和`private`。 您将详细了解另外两个可见性修饰符`protected`和`internal`(以及`public`和`private`)。 * * * ## 包内的可见性修饰符 程序包组织了一组相关的函数,属性和类,对象和接口。 **推荐阅读**: *Kotlin 包* | 编辑 | 描述 | | --- | --- | | `public` | 声明随处可见 | | `private` | 在包含声明的文件内可见 | | `internal` | 在同一模块内可见(一组一起编译的 Kotlin 文件) | | `protected` | 不适用于包(用于子类) | **注意**:如果未指定可见性修饰符,则默认为`public`。 让我们举个例子: ```kt // file name: hello.kt package test fun function1() {} // public by default and visible everywhere private fun function2() {} // visible inside hello.kt internal fun function3() {} // visible inside the same module var name = "Foo" // visible everywhere get() = field // visible inside hello.kt (same as its property) private set(value) { // visible inside hello.kt field = value } private class class1 {} // visible inside hello.kt ``` * * * ## 类和接口内的可见性修饰符 这是可见性修饰符对在类内声明的成员(函数,属性)的工作方式: | 修饰符 | 描述 | | --- | --- | | `public` | 任何可以看到声明类的客户都可以看到 | | `private` | 仅在类内部可见 | | `protected` | 在类及其子类中可见 | | `internal` | 对于模块内可以看到声明类的任何客户端可见 | **注意**:如果在派生类中覆盖`protected`成员而未指定其可见性,则其可见性也将为`protected`。 Let's take an example: ```kt 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<String>) { 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 } ``` * * * ## 更改构造器的可见性 默认情况下,构造器的可见性为`public`。 但是,您可以更改它。 为此,您需要显式添加`constructor`关键字。 在下面的示例中,构造器默认为`public`: ```kt class Test(val a: Int) { // code } ``` 您可以通过以下方法更改其可见性。 ```kt class Test private constructor(val a: Int) { // code } ``` 这里的构造器是`private`。 * * * **注意**:在 Kotlin 中,局部函数,变量和类不能具有可见性修饰符。