Kotlin 提供了四种主要的可见性修饰符:
public
、private
、protected
和internal
。这些修饰符可以应用于类、接口、函数、属性、构造函数等。
- 如果没有显式指定可见性修饰符,默认的可见性是
public
。
这里的public
、private
、protected
都很好理解,和Java的修饰符基本上一样,主要是这个internal
是Kotlin独有的,这里重点解释说明一下
internal
internal
修饰符的作用范围是模块内部 ,即只能在同一个模块内访问
在 Kotlin 中,模块 是指一组一起编译的代码文件。在 Gradle 项目中,每个子工程(subproject)通常被视为一个独立的模块(maven拆多工程一样)
。例如:
- 如果你的项目通过 Gradle 拆分成了
A
和B
两个子工程,那么:A
是一个模块。B
是另一个模块。
举一个例子,在项目中我拆分了两个子工程一个basic
,另外一个functional
,在basic
子工程中我定义了Helper类
// internal关键字修饰
internal class Helper {
fun help() = println("帮助")
}
在functional
模块中引入basic
模块,来使用Helper
类,此时idea就已经提示报错了。
dependencies {
// 引入basic模块
implementation(project(":kt-basic:basic"))
}
小结
修饰符 | 类内部 | 同文件 | 子类 | 同模块 | 其他模块 |
---|---|---|---|---|---|
public | ✅ | ✅ | ✅ | ✅ | ✅ |
private | ✅ | ❌ | ❌ | ❌ | ❌ |
protected | ✅ | ❌ | ✅ | ❌ | ❌ |
internal | ✅ | ✅ | ✅ | ✅ | ❌ |