Scala 伴生类与伴生对象:替代静态特性的优雅设计
Scala 中没有 static 关键字,而是通过伴生类(Companion Class) 和伴生对象(Companion Object) 的机制实现类似静态成员的功能。这种设计既保留了面向对象的纯粹性,又满足了静态特性的需求,是 Scala 面向对象模型的重要组成部分。本文将详细解析伴生类与伴生对象的定义、特性、底层实现及最佳实践。
基本概念与定义
伴生类
- 用
class关键字定义,包含非静态成员(属性、方法),需要实例化后才能访问。 - 代表类的实例化特性,每个对象独立拥有其属性。
伴生对象
- 用
object关键字定义,名称与伴生类相同,包含 “静态” 成员(属性、方法),可直接通过类名访问。 - 代表类的全局特性,所有实例共享其成员。
定义示例
1 | // 伴生类(非静态成员) |
核心特性
访问权限
- 伴生类与伴生对象可相互访问对方的
private成员,无需额外修饰。 - 这是 Scala 特有的权限设计,方便在 “静态” 与 “非静态” 成员间共享数据。