文章目录
- 定义
- 不同区域可用修饰符
- 与其他修饰符冲突
定义
可见性修饰符可以控制变量、函数、类等的可访问范围。
一个类也有自己的隐私。
在 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
去修饰会引起冲突。