1. 伴生对象
在Java中,我们经常需要用到同时包含实例方法和静态方法的类,在Scala中可以通过伴生对象来实现。
伴生对象中的方法 和 java 中被 static 修饰的方法 具有同样的功能。
当单例对象与某个类具有相同的名称时,它被称为这个类的“伴生对象”。类和它的伴生对象必须存在于同一个文件中,而且可以相互访问私有成员(字段和方法)。
class Person {
private val id = Person.newPersonId() //调用了伴生对象中的方法
def info() { printf("The id is %d.\n",id)}
}
object Person {
private var lastId = 0 //一个人的身份编号
private def newPersonId() = {
lastId +=1
lastId
}
def main(args: Array[String]){
val person1 = new Person()
val person2 = new Person()
person1.info()
person2.info()
}
}
运行结果如下:
The id is 1.
The id is 2.
从上面结果可以看出,伴生对象中定义的 newPersonId() 实际上就实现了Java中静态(static)方法的功能,所以,实例化 person1 调用 newPersonId() 返回1,实例化 person2 返回 2。
2. val 和 var 的区别
Scala有两种变量,val和var。val(相当于 Java 的 final)就不能再赋值了。与之对应的,var可以在它生命周期中被多次赋值。
val的演示:
scala> val msg=”Hello,world!”;
scala> msg=”Hello again,world!”;
//会报错
:5: error: reassignment to val
网友评论