2019-04-22
关键字:Scala 伴生对象的作用
关于 Scala 伴生对象,比教材更详细的解释。
什么是伴生对象?
教材中关于伴生对象的解释是:实现类似 Java 中那种既有实例成员又有静态成员的类的功能。
为什么上面说它是一种 “功能” 呢?因为要想实现像 Java 中那样的类,光靠一个 Scala 类可不行。在 Scala 中,我们必须:
1. 定义一个 class 并在这里面实现所有的实例成员。
2. 添加一个 object ,这个 object 要与上面的 class 同名,然后在这里面实现所有的静态成员。
3. 定义的 class 与 object 必须在同一个文件内。
满足了上面 3 条要求以后,就可以实现类似 Java 中一个类既存在实例成员又存在静态成员的功能了。然后我们通常把第 2 步添加的 object 称为 “伴生对象” 。转化成代码,就像下面这样
class CompanionDemo { println("new CompanionDemo clz") def init(): Unit = { // our codes... } } object CompanionDemo { println("new CompanionDemo object") def prt(): Unit = { // our codes... } }
伴生对象有什么特点?
毫无疑问,伴生对象这种存在最大的特点就是可以实现类似 Java 中那样,在同一个类里既有实例成员又有静态成员的功能。
另一个特点就是 class CompanionDemo 和 object CompanionDemo 虽然分开两处定义,但却可以访问对方的 private 变量及方法。访问私有属性的一个小示例如下
class CompanionDemo { private var clzi = 0 def init(): Unit = { println("variable in clz:" + clzi) println("variable from object:" + CompanionDemo.obji) CompanionDemo.access(this) } } object CompanionDemo { private var obji = 1 def access(clz: CompanionDemo): Unit = { println("variable in object:" + obji) println("variable from clz:" + clz.clzi) } }