当前位置: 首页 > news >正文

类和包的可见性

Kotlin 是 JetBrains 开发的一门现代编程语言,因其简洁性、安全性和强大功能而广受欢迎。本主题将深入探讨 Kotlin 中一个重要的概念:类、包和模块的可见性(visibility)。可见性决定了代码中的哪些组件可以从其他部分访问。理解可见性将帮助你编写更安全、更模块化的代码。


定义类的可见性

在 Kotlin 中,类的可见性由**可见性修饰符(visibility modifiers)**决定,这些修饰符指定了哪些代码可以访问该类。Kotlin 提供了四种可见性修饰符:

  • public:类可以被任意代码访问(默认可见性)。

  • internal:类只能在同一个模块中访问。

  • protected:类只能在其自身及其子类中访问。

  • private:类只能在声明它的文件内部访问。

示例:

public class PublicClass
internal class InternalClass
protected class ProtectedClass // 编译错误,顶层类不能使用 protected
private class PrivateClass

说明:在 Kotlin 中,顶层类不能使用 protected 修饰符,因为 protected 只适用于类成员(字段、函数)而不是顶层声明。

protected是一种可见性修饰符(visibility modifier),它的作用是在类内部以及该类的子类中使成员(例如属性、方法)可访问


继承与可见性

在 Kotlin 中,如果一个类继承了另一个类,它可以访问父类的 protectedinternal 成员。但无法访问父类的 private 成员。

open class Parent {protected val protectedValue = 42private val privateValue = 21
}class Child : Parent() {fun printValues() {println(protectedValue) // 合法访问println(privateValue)   // 编译错误,无法访问 private 成员}
}

说明:protectedValue 可以被子类访问,而 privateValue 只能在 Parent 类中访问。


定义包的可见性

在 Kotlin 中,用于组织相关的类、对象和函数。包中的可见性同样由可见性修饰符控制。

// 文件:mypackage/MyClass.kt
package mypackagepublic class MyClass
internal class MyInternalClass

public 类对所有包可见,而 internal 类只能在同一模块内的其他文件中访问。


导入与包的使用

若要在其他包中使用类,必须导入它们。如果类是 public 或在同一模块中定义的 internal,则可以导入或使用全限定名访问。

import mypackage.MyClassfun main() {val myClass = MyClass() // 使用已导入的类val myInternalClass = mypackage.MyInternalClass() // 使用 internal 类(同模块内可以)
}

注意:internal 类不能跨模块访问。


模块与 internal 可见性

模块(module) 是一起编译的一组源代码文件。在 Kotlin 中,一个模块可以是:

  • 一个 IntelliJ IDEA 项目,

  • 一个 Gradle 或 Maven 项目,

  • 或者其他编译单元。

internal 修饰符用于表示某个代码元素只能在一个模块内部访问。当你希望限制某些代码的访问范围,使其不被模块外部访问时,这非常有用。

// 文件:mymodule/MyInternalClass.kt
package mymoduleinternal class MyInternalClass {val value = 42
}// 同模块下的另一个文件
import mymodule.MyInternalClassfun main() {val instance = MyInternalClass() // 合法,因为在同一模块中println(instance.value)
}

总结

在本主题中,我们了解了 Kotlin 中关于类、包和模块的可见性。我们学习了四种可见性修饰符:

  • public:对所有代码可见。

  • internal:仅在模块内可见。

  • protected:仅对子类和当前类可见。

  • private:仅在声明它的作用域(如类或文件)内可见。

理解这些可见性修饰符对于编写模块化、安全的 Kotlin 代码非常关键。

http://www.lryc.cn/news/598741.html

相关文章:

  • 磁性材料如何破解服务器电源高频损耗难题?
  • Linux C 网络基础编程
  • Redis高可用架构演进面试笔记
  • 13-C语言:第13天笔记
  • mysql索引底层B+树
  • HTTP/1.0、HTTP/1.1 和 HTTP/2.0 主要区别
  • OpenLayers 综合案例-基础图层控制
  • 主要分布在背侧海马体(dHPC)CA1区域(dCA1)的位置细胞对NLP中的深层语义分析的积极影响和启示
  • 《Java语言程序设计》第2章复习题(3)
  • 高亮标题里的某个关键字正则表达式
  • JMeter 性能测试实战笔记
  • 云端哨兵的智慧觉醒:Deepoc具身智能如何重塑工业无人机的“火眼金睛”
  • 无人机正摄影像自动识别与矢量提取系统
  • 无人机保养指南
  • 无人机速度模块技术要点分析
  • 04.建造者模式的终极手册:从快餐定制到航天飞船的组装哲学
  • (LeetCode 面试经典 150 题) 56. 合并区间 (排序)
  • Flutter 主流 UI 框架总结归纳
  • 让UV管理一切!!!
  • Django实时通信实战:WebSocket与ASGI全解析(上)
  • 使用钉钉开源api发送钉钉工作消息
  • kafka的shell操作
  • kafka消费者组消费进度(Lag)深入理解
  • 【阿里云-ACP-1】疑难题解析
  • 力扣189:轮转数组
  • Linux基础服务(autofs和Samba)
  • 深圳三维扫描铸件形位公差尺寸测量3d偏差检测-中科米堆CASAIM
  • LeetCode 2322:从树中删除边的最小分数
  • Elasticsearch 的聚合(Aggregations)操作详解
  • multiprocessing 模块及其底层机制 spawn_main 在大模型应用中的场景