Scala单例对象和伴生对象

1、Scala单例对象 
Scala单例对象是十分重要的,没有像在Java一样,有静态类、静态成员、静态方法,但是Scala提供了object对象,这个object对象类似于Java的静态类,它的成员、它的方法都默认是静态的。

如果object的静态成员要被外界访问,则该成员不能被private修饰

2、Scala伴生对象 
如果有同样一个类与该object名字一样,则称该object为该类的伴生对象,相对应,该类为object的伴生类。

如果一个类有它的伴生对象,这个类就可通过object的名字访问到所有成员,但object不在该类的作用范围。

 

经典伴生对象和伴生类实现demo

/**
  * Created by root
  * Description : 伴生对象和伴生类
  *
  * 伴生类ObjectAndClassTest的构造函数定义为private,虽然这不是必须的,却可以有效防止外部实例化ObjectAndClassTest类,使得ObjectAndClassTest类只能供对应伴生对象使用;
  * 每个类都可以有伴生对象,伴生类与伴生对象写在同一个文件中;
  * 在伴生类中,可以访问伴生对象的private字段ObjectAndClassTest.specialty
  * 而在伴生对象中,也可以访问伴生类的private方法:objectAndClassTest.getSpecialtyName()
  * 最后,在外部不用实例化,直接通过伴生对象访问方法:ObjectAndClassTest.printSpectalty()
  *
  */
class  ObjectAndClassTest private(val name:String) {

  private def getSpecialtyName() = "name = " + name + ";specialty = " + ObjectAndClassTest.specialty
}

object ObjectAndClassTest{
    private val specialty = "software development"
    private val objectAndClassTest = new ObjectAndClassTest("xiaoming")
    def printSpectalty() = println(objectAndClassTest.getSpecialtyName())

}


object Test{
  def main(args: Array[String]): Unit = {
    ObjectAndClassTest.printSpectalty()
  }
}

 

posted @ 2017-12-07 12:22  麻雀虽小五脏俱全  阅读(1287)  评论(0编辑  收藏  举报