可见性修饰符
类、对象、接口、构造函数和方法,以及属性及其设置器(setters),都可以拥有可见性修饰符。 获取器(getters)的可见性始终与它们所属的属性相同。
在 Kotlin 中有四个可见性修饰符: private
、 protected
、 internal
和 public
。 默认可见性是 public
。
在本页面上,你将学习这些修饰符如何适用于不同类型的声明范围。
包
函数、属性、类、对象和接口可以在包的“顶层”直接声明:
如果你没有使用可见性修饰符,默认情况下将使用
public
。这就意味着你的声明将在任何地方都可见。如果你将声明标记为
private
,它只会在包含该声明的文件内可见。如果将其标记为
internal
,它将在同一模块中的任何地方可见。请注意,
protected
修饰符不适用于顶层声明。
示例:
类成员
对于在类内声明的成员:
private
表示该成员仅在该类内可见(包括其所有成员)。protected
表示该成员具有与标记为private
相同的可见性,但它还在子类中可见。internal
表示在此模块内看到声明类的任何客户端都会看到其internal
成员。public
表示看到声明类的任何客户端都会看到其public
成员。
如果你重新定义了一个 protected
或者 internal
成员,而没有明确指定它的可见性,那么重新定义的成员将会具有与原始成员相同的可见性。
示例:
构造函数
使用以下语法指定类的主构造函数的可见性:
在这里,构造函数是私有
的。 默认情况下,所有构造函数都是公开的 (public
)。 这实际上意味着它们可以在类可见的任何地方被访问到(这也就是说, internal
类的构造函数只有在同一模块内才能被看到)。
对于密封类(sealed classes),构造函数默认是 protected
的。有关更多信息,请参见 密封类。
局部声明
局部变量、函数和类不能具有可见性修饰符。
模块
internal
这个可见性修饰符表示,被标记的成员(通常是函数、类等)只能在同一个模块内可见。 具体来说,模块是一组在编译时一起处理的 Kotlin 文件,例如:
IntelliJ IDEA 的模块。
Maven 项目。
Gradle 的源代码集(但
test
源代码集只能访问main
的内部声明)。使用
<kotlinc>
Ant 任务的文件集。