scala对象

1.单例对象

/*
scala中没有静态方法 静态字段 使用object达到同样的目的

首次使用时构造器会被执行
未被使用时不会被执行
 */
object MyCounter {

  private var lastNumber = 0

  def newUniqueNumber() = {
    lastNumber += 1
    lastNumber
  }

}

2.伴生对象

/*
伴生对象 伴生类
1.名称相同
2.类和他的伴生对象可以相互访问私有特性
3.必须在同一个源文件中
 */

class MyCounter {
  val id = MyCounter.newUniqueNumber()
  private var balance = 0.0

}

object MyCounter {

  private var lastNumber = 0

  def newUniqueNumber() = {
    lastNumber += 1
    lastNumber
  }

}

3.扩展类或特质的对象

//一个object可以扩展类以及一个或者多个特质
//其结果是扩展了指定类以及特质的类的对象
//同时拥有在对象定义中给出的所有特性
abstract  class UndoableAction(val description:String){
  def undo():Unit
  def redo():Unit
}

object DoNothingAction extends UndoableAction("Do nothing"){
  override def undo(): Unit = ???

  override def redo(): Unit = ???
}

4.apply方法

class Person private(id: Int, age: Int) {

}

object Person {
  def apply(id: Int, age: Int) = {
    new Person(id, age)
  }

  def main(args: Array[String]): Unit = {
    val p1 = Person(1, 2)
  }
}

5.应用程序对象

1.main方法
2.继承App
class Person private(id: Int, age: Int) {

}

object Person extends App {
  val p1 = Person(1, 2)
}

6.枚举

/*
scala没有枚举类型
助手类:Enumeration
定义扩展Enumeration类的对象,并以Value方法调用初始化枚举中的所有可选值
 */

object TrafficLightColor extends Enumeration {
  val Red, Yellow, Green = Value

  def main(args: Array[String]): Unit = {
    val a: TrafficLightColor.Value = TrafficLightColor.Green //引用枚举值  类型:TrafficLightColor.Value
  }
}
原文地址:https://www.cnblogs.com/yin-fei/p/10830701.html