伴生对象
在读scala代码时,经常会看到object声明的对象, 它与class有什么不同呢?
class是一种定义和描述, 它定义了一些方法以及和其它类型的组合。
object可以看做一个单例singlenton,它是一个类的实例, 确保唯一性。声明一个object, 一个匿名类就会被创建。
伴生对象和类的关系
如果伴生对象的名字和类名相同, 这时, 伴生对象和类都可以获取对方的方法
class X {
// class X能获取object X的私有成员
// 用前缀的方式调用object的方法
def m(x: Int) = X.f(x)
// 显示的导入object X的方法
import X._
def n(x: Int) = f(x)
private def o = 2
}
object X {
private def f(x: Int) = x * x
// object X能够获取class X的成员
def g(x: X) = {
import X._
x.o * o
}
}
伴生对象其它的特性
def apply(...) enables the usual method name-less syntax of A(...)
def unapply(...) allows to create custom pattern matching extractors
[implicit parameters](http://docs.scala-lang.org/tutorials/tour/implicit-parameters.html)