文章目录
- 定义
- 不同区域可用修饰符
- 与其他修饰符冲突
定义
可见性修饰符可以控制变量、函数、类等的可访问范围。
一个类也有自己的隐私。
在 Kotlin 中,有以下可见性修饰符可以使用,你可以在定义变量、函数、类、接口时使用它们(前提是该定义不是局部定义,并且修饰符被允许),默认的修饰符是public。
public公开的,所有区域可访问private私有的,限定区域(一般是文件内或类、接口中)内部可访问internal模块内部公开,只有在模块内可访问protected受保护的,类中和子类中可访问
可见性范围大小: public>internal > protected > private。在重写属性或方法时,可见性只能大于或等于父类的声明。
open class Base {protected open val name = "Base"
}class Extend: Base() {public override val name = "Extend"
}fun main() {// Base().name 不可访问Extend().name // 可以访问
}
不同区域可用修饰符
在不同地方,修饰符的功能会有些许差异。若不声明修饰符,则会使用默认的修饰符public。
| 区域 | public | private | internal | protected |
|---|---|---|---|---|
| 文件顶层 | 可用 | 可用,文件内部可访问 | 可用 | 不可用 |
| 类 | 可用 | 可用,类中可访问 | 可用 | 可用,类中和子类中可访问 |
| 接口 | 可用 | 可用,接口中可访问 | 不可用,但可以用于修饰接口internal interface USB(这属于文件顶层或类的范畴) | 不可用 |
与其他修饰符冲突
open(可被子类重写,可以是public、internal或protected)、abstract(抽象,public或internal)修饰符本身带有半公开的意思,此时如果使用private去修饰会引起冲突。
