Scala单例对象、伴生对象实战详解

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

 

//若是object的静态成员要被外界访问,则该成员不能被private修饰函数

object University{ 工具

  private var studentNo = 0 this

  def newStudentNo = { studentNo += 1 studentNo } spa

} scala

object objecOps { def main (args : Array[String]) : Unit = {3d

  println(University.newStudentNo) println(University.newStudentNo) } code

}对象

二、Scala伴生对象 
若是有一样一个类与该object名字同样,则称该object为该类的伴生对象,相对应,该类为object的伴生类。若是一个类有它的伴生对象,这个类就可经过object的名字访问到全部成员,但object不在该类的做用范围。blog

class University{ val id = University.newStudentNo private var number = 0 def aClass (number : Int){this.number += number} } object University { private var studentNo = 0 def newStudentNo = { studentNo += 1 studentNo } }

object对象为静态常量、静态变量区域,能够直接调用,共享全局变量颇有意义,伴生对象方便类的构建,可作为当前类的静态方法、成员的集合。 

  • 伴生对象与伴生类在Scala的面向对象编程方法中占据极其重要的位置,例如Scala中许多工具方法都是由伴 生对象提供的。
  • 伴生对象与伴生类

 

 

伴生对象首先是一个单例对象,单例对象用关键字object定义。在Scala中,单例对象分为两种,一种是并未自动关联到特定类上的单例对象,称为独立对象 
(Standalone Object);另外一种是关联到一个类上的单例对象,该单例对象与该类共有相同名字,则这种单例对象称为伴生对象(Companion 
Object),对应类称为伴生类。

 

 

 

 

 

这是一个典型的伴生类和伴生对象的例子,注意如下说明:

    • 伴生类Person的构造函数定义为private,虽然这不是必须的,却能够有效防止外部实例化Person类,使得Person类只能供对应伴生对象使用;
    • 每一个类均可以有伴生对象,伴生类与伴生对象写在同一个文件中;
    • 在伴生类中,能够访问伴生对象的private字段Person.uniqueSkill;
    • 而在伴生对象中,也能够访问伴生类的private方法 
      Person.getUniqueSkill();
    • 最后,在外部不用实例化,直接经过伴生对象访问Person.printUniqueSkill()方法
相关文章
相关标签/搜索