📅  最后修改于: 2023-12-03 15:32:31.398000             🧑  作者: Mango
在 Kotlin 中,可见性控制指定了一个类、对象、接口、构造函数、属性或者函数的可见性。Kotlin 提供了四个可见性修饰符:private
、protected
、internal
和 public
。
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"