Skip to content

Latest commit

 

History

History
122 lines (79 loc) · 3.54 KB

File metadata and controls

122 lines (79 loc) · 3.54 KB

Kotlin 可见性修饰符

原文: https://www.programiz.com/kotlin-programming/visibility-modifiers

在本文中,您将了解 Kotlin 中的所有 4 种可见性修饰符,以及它们在不同情况下的工作方式。

可见性修饰符是用于设置类,对象,接口,构造器,函数,属性及其设置程序的可见性(可见性)的关键字。 (您无法设置获取器的可见性修饰符,因为它们始终具有与属性相同的可见性。)

Kotlin 类和对象文章中,您简要了解了可见性修饰符publicprivate。 您将详细了解另外两个可见性修饰符protectedinternal(以及publicprivate)。


包内的可见性修饰符

程序包组织了一组相关的函数,属性和类,对象和接口。 推荐阅读Kotlin 包

编辑 描述
public 声明随处可见
private 在包含声明的文件内可见
internal 在同一模块内可见(一组一起编译的 Kotlin 文件)
protected 不适用于包(用于子类)

注意:如果未指定可见性修饰符,则默认为public

让我们举个例子:

// 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:

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

class Test(val a: Int) {
    // code
}

您可以通过以下方法更改其可见性。

class Test private constructor(val a: Int) {
    // code
}

这里的构造器是private


注意:在 Kotlin 中,局部函数,变量和类不能具有可见性修饰符。