kotlin 中 default,public,final,open, protected,private,internal 关键字

本文探讨了Kotlin与Java在扩展性、访问控制上的差异。Kotlin的default等同于Java的final,需显式open才能扩展。公共访问级别默认为public,与Java的包可见不同。Kotlin的protected仅类和子类可见,private限制更严,内部类成员对外部类不可见。此外,Kotlin特有的internal修饰符提供了模块级别的可见性。

default 情况下:

等同于 final,需要声明 open 才可扩展,这是和 Java 相反的扩展约束策略

等同于 public 访问级别,和 Java 默认的包可见不同

正因为此,Kotlin 中 final 和 public 无需显示声明

protected 是类可见外加子类可见,而 Java 则是包可见外加子类可见

private 修饰的内部类成员无法被外部类访问,和 Java 不同

internal 修饰符是模块可见,和 Java 默认的包可见有相似之处,也有区别

public 是 所有都可以 类 与 类实例

protected 只有 类 与子类 可见 自身与子类实例无法访问

private 只有类自身可见 子类 不可见 自身与子类实例无法访问

open 可以被重写

kotlin

### Kotlin 中 `internal` 关键字的作用 在 Kotlin 中,`internal` 是一种访问修饰符,其主要功能是限定某个声明(如类、方法、属性等)仅在同一模块内可见[^2]。这意味着被标记为 `internal` 的成员可以在同一模块内的任何文件中访问,但在其他模块中则不可见。 #### 同一模块的定义 Kotlin 将模块视为一组编译在一起的源代码集合。通常情况下,一个 Gradle 或 Maven 子项目会被认为是一个独立的模块。因此,如果两个文件属于同一个构建配置下的不同包,则它们仍然共享相同的模块范围,并能够相互访问彼此的 `internal` 成员[^2]。 #### 使用场景 以下是 `internal` 访问修饰符的一些典型应用场景: 1. **跨包协作** 当某些实现细节需要在一个项目的多个包之间共享时,可以将其设置为 `internal` 而不是公开给整个世界。这样既保持了一定程度上的封装性,又允许必要的灵活性。 2. **测试支持** 单元测试经常位于单独的目录下但仍需调用生产环境中的逻辑。通过将这些部分设为 `internal` 可以让测试框架顺利运行而无需完全暴露 API 给外界用户[^2]。 3. **插件开发或库设计** 如果正在创建供第三方使用的库,那么可能希望隐藏大部分复杂的内部结构以免干扰使用者体验的同时保留足够的自由度去维护自己的代码质量。 下面展示了一个简单的例子说明如何运用此特性: ```kotlin // 文件 A (moduleA) package com.example.modulea internal fun helperFunction() { println("This is an internal function.") } class InternalClass { internal val property = "Internal Property" } ``` ```kotlin // 文件 B (still in moduleA but different package) package com.example.anotherpackage import com.example.modulea.helperFunction import com.example.modulea.InternalClass fun useInternalComponents() { helperFunction() val instance = InternalClass() println(instance.property) // 输出: Internal Property } ``` 尝试从另一个模块访问上述组件将会引发错误因为超出了许可边界。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值