scala单例对象
单例是一种只能有一个实例的对象
单例对象的成员、方法都默认是静态的,可以全局访问,共享全局变量很有意义
单例对象还可以扩展类和性状
与类不同的是,单例对象没有参数,单列对象可以拥有类的所有特性
需要注意的是,单例对象会在第一次被访问的时候初始化
import java.io._
class Point(val xc: Int, val yc: Int) {
var x: Int = xc
var y: Int = yc
def move(dx: Int, dy: Int) {
x = x + dx
y = y + dy
}
}
object Test {
def main(args: Array[String]) {
val point = new Point(10, 20)
//Point.move(100,200)
//运行结果为110,220
printPoint
def printPoint{
println ("x ====== : " + point.x);
println ("y ====== : " + point.y);
}
}
}
scala伴生对象
当单例对象与某个类共享同一个名称时,他被称作是这个类的伴生对象:companion object。
你必须在同一个源文件里定义类和它的伴生对象。
类被称为是这个单例对象的伴生类:companion class。
类和它的伴生对象可以互相访问其私有成员。
// 伴生对象,与类名字相同,可以访问类的私有属性和方法
object ObjectOps {
//伴生类
class Fish private(val name:String)
{
private def getlove() = name + " like " + Fish.sky
}
object Fish {
private val sky = "the sky"
private val fish = new Fish("the fish")
def printlover =println(fish.getlove())
}
def main(args: Array[String]): Unit = {
Fish.printlover
}
}
}