Kotlin-可见性修饰符

可见性修饰符用于其修饰对象的适用范围。在Kotlin中,存在private、protectedinternal以及 public等四种修饰符,它们可用于修饰类、对象、接口、构造器、函数、属性、以及属性的设值方法等。


注:属性的取值方法永远与属性本身的可见度一致, 因此不需要修饰符修饰。

在不同的作用范围内,修饰符的意义有一定的差别,下面从包、类和接口、模块(Model)等三个范围内看:

在Kotlin中,包级别的定义称为top-level,即直接定义在包内,可定义函数、属性、类、对象及接口。

  • public:默认修饰符,被其修饰的在任何位置都能访问
  • private:只能在当前源文件内使用
  • internal:在同一模块内使用
  • protected:无效修饰符,只用于类和接口内

示例:

// file name: example.kt
package foo
private fun foo() {} // 只在 example.kt 文件内可访问
public var bar: Int = 5 // 这个属性在任何地方都可以访问
private set // 但它的设值方法只在 example.kt 文件内可以访问
internal val baz = 6 // 在同一个模块(module)内可以访问

类和接口

  • public:默认修饰符,被其修饰的在任何位置都能访问
  • private:表示只在这个类(以及它的所有成员)之内可以访问
  • protected:在当前类及其子类内访问
  • internal:在同一模块内使用

示例:

open class Outer {
    private val a = 1
    protected val b = 2
    internal val c = 3
    val d = 4 // 默认为 public
    protected class Nested {
    public val e: Int = 5
    }
}

class Subclass : Outer() {
    // a 不可访问
    // b, c 和 d 可以访问
    // Nested 和 e 可以访问
} 

class Unrelated(o: Outer) {
    // o.a, o.b 不可访问
    // o.c 和 o.d 可以访问(属于同一模块)
    // Outer.Nested 不可访问, Nested::e 也不可访问
}

构造器

一般在类的主构造器都不使用修饰符修饰,即默认使用public修饰符。但在实际开发时,主构造器可能被其他修饰符修饰。比如在创建单例模式时,为了防止在外部调用主构造器,主构造器就是使用private修饰符修饰。当使用其他修饰符修饰构造器时,需要明确添加一个constructor关键字。

class C private constructor(a: Int) { ... }

模块(Model)

个模块(module)是指一起编译的一组 Kotlin 源代码文件:

  • 一个 IntelliJ IDEA 模块
  • 一个 Maven 工程, 或 Gradle 工程
  • 通过 Ant 任务的一次调用编译的一组文件

局部声明

局部变量, 局部函数, 以及局部类, 都不能指定可见度修饰符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值