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)
    
  }
  
}
相互访问私有属性

相关文章: