📜  Kotlin-可见性控制(1)

📅  最后修改于: 2023-12-03 15:32:31.398000             🧑  作者: Mango

Kotlin 可见性控制

在 Kotlin 中,可见性控制指定了一个类、对象、接口、构造函数、属性或者函数的可见性。Kotlin 提供了四个可见性修饰符:privateprotectedinternalpublic

private

private 修饰符限制了可见性,因此带有 private 修饰符的类、对象、接口、构造函数、属性或者函数仅在声明它们的文件中可见。在同一个文件中,我们可以访问该成员。示例:

class MyClass {
    private val x = 5 // x 只在 MyClass 内部可见

    fun printX() {
        println(x)
    }
}
protected

protected 修饰符与 Java 中的含义相同。带有 protected 修饰符的类、对象、接口、构造函数、属性或者函数只在它们自己和它们的子类中可见。在 Kotlin 中,protected 成员对于声明它们的类和它们的子类都是可见的,但对于同一个包中的其他类则不可见。

open class Base {
    protected val i = 1
}

class Derived : Base() {
    fun printI() {
        println(i) // protected 成员在其子类中可见
    }
}

class Other {
    // i 不是可见的
    // Base 不是 Other 的子类
}
internal

internal 修饰符表示,一个类、对象、接口、构造函数、属性或者函数只在相同模块内可见。模块是 Kotlin 编译器在编译时把一起编译的一套 Kotlin 文件。一个 IntelliJ IDEA 模块是一个 Kotlin 模块。

internal fun sayHello() {
    println("Hello")
}

在同一个模块中,我们可以访问上面的 sayHello() 函数。

public

public 修饰符表示,一个类、对象、接口、构造函数、属性或者函数可被任何地方访问。如果没有显式指定可见性修饰符,默认为 public

class MyClass {
    val x = 5 // 隐式 public,因为它没有任何可见性修饰符
}

与 Java 不同,Kotlin 中顶层声明(不在任何类、对象或者接口内部的声明)不会自动被 public 修饰符修饰。顶层声明如果需要被其他模块可见,则需要使用 public 显式修饰。

// 指定为 `public`,因此它将在其他模块中可见
public const val TEST_CONST = "test"