Kotlin中internal类的internal成员与public成员有何区别?
Kotlin internal类成员权限问题
给定代码:
internal class Point { internal val x = 0 public val y = 0 }
核心问题解答
1. x和y是否仅能在同一模块内访问?
是的。因为Point类本身被internal修饰,仅能在同一模块内被引用,外部模块根本无法获取Point类的定义,自然也无法访问它的任何成员——不管成员是internal还是public。而在同一模块内,x和y都是可正常访问的。
2. internal类中internal与public修饰成员的区别
在同一模块内,两者的直接访问权限没有差异,但存在以下几点区别:
- 语义清晰度:
internal成员明确传达了“仅为模块内部逻辑服务”的设计意图,而public成员则表示该成员是模块内公开可用的接口,语义上更偏向于模块内的公共API。 - 继承与重写:如果
Point类被标记为open,同一模块内的子类可以继承它。对于public的open成员,子类重写后,该重写成员在模块内的可见性依然是公开的;而internal的open成员,重写后的成员也仅能在模块内被访问(不过因为类本身是internal,外部模块也看不到子类)。 - 反射场景:在模块内通过反射访问时,两者的可见性标记不同(
public成员的反射可见性为PUBLIC,internal为MODULE),但实际访问权限一致;在模块外,由于类本身不可见,反射也无法获取到这些成员。
内容的提问来源于stack exchange,提问作者Zeljko Brckovic
相关产品推荐
相关产品推荐

