Kotlin 访问修饰符

预计阅读时间1 分 191 views

在 Kotlin 中,我们使用可见性修饰符来控制类、对象、接口、构造函数、属性以及它们的 setter 方法的访问权限。Kotlin 提供了四种可见性修饰符:privateprotectedinternalpublic

四种可见性修饰符

修饰符含义
private声明的元素仅在声明它的文件内可见,即使是子类也无法访问。
protected声明的元素在其声明的类和所有子类中可见,但在其他地方不可见,包括同一个包下的其他类。
internal声明的元素在同一个模块内可见。模块是指一组一起编译的 Kotlin 文件,例如 IntelliJ IDEA 中的一个模块。
public默认修饰符,声明的元素在任何地方都可见。
来源:啰说教程(luoshuo.net)

默认修饰符: public

如果没有为声明的元素指定任何可见性修饰符,那么默认使用 public 修饰符,这意味着该元素在任何地方都可见。

私有访问控制: private

使用 private 修饰符声明的元素只能在声明它的文件中访问。即使是子类也无法访问父类的 private 成员。

class Person {
    private var age = 0  // private 属性,只能在 Person 类内部访问

    fun growOld() {
        age++
    }
}

fun main() {
    val person = Person()
    //  person.age++  // 错误:无法访问 private 属性 'age'
    person.growOld()
}

受保护的访问控制: protected

使用 protected 修饰符声明的元素在其声明的类和所有子类中可见,但在其他地方不可见,包括同一个包下的其他类。

open class Animal {
    protected var name = ""  // protected 属性,可以在 Animal 类及其子类中访问
}

class Dog: Animal() {
    fun bark() {
        println("Woof! My name is $name")  // 可以访问父类的 protected 属性
    }
}

内部访问控制: internal

使用 internal 修饰符声明的元素在同一个模块内可见。模块是指一组一起编译的 Kotlin 文件,例如 IntelliJ IDEA 中的一个模块。

// 文件名:Utils.kt
internal fun printMessage(message: String) {  // internal 函数,只能在同一个模块内调用
    println(message)
}

// 文件名:Main.kt (假设与 Utils.kt 在同一个模块内)
fun main() {
    printMessage("Hello from internal function")
}

总结

可见性修饰符是 Kotlin 中非常重要的概念,合理的运用它们可以帮助我们编写更加安全、易于维护的代码。在实际开发过程中,建议尽量将类的成员声明为 privateprotected,只将必要的接口暴露给外部。

分享此文档

Kotlin 访问修饰符

或复制链接

本页目录