You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:55:27