class counter { var value =0//注意这里没有private修饰符,从而让这个变量对外部可见def increment(step: Int): unit= { value +=step} def current(): Int= {value} object MyCounter{ def main(args :Array[string]){ val mycounter = new counter println(mycounter.value)//不是用getxxx获取字段的值
mycounter.value =3//不是用setxxx设置字段的值 mycounter.increment(1)//这里设置步长为1,每次增加1println(mycounter.current) } }
编译并执行这个文件得到两行结果,第一行是0,第二行是4
在java中一般会把value设置为私有变量,通过getter和setter调用,那么在scala中如何操作?
value变成私有字段以后,Scala又没有提供getter和setter方法,怎么可以访问value字段呢?解决方案是,在Scala中,可以通过定义类似getter和setter的方法,分别叫做value和value_=
class counter { private var privatevalue =e1/变成私有字段,并且修改字段名称 def value = privatevalue//定义一个方法,方法的名称就是原来我们想要的字段的名称def value_=(newValue: Int){ if(newValue > 0) privatevalue = newValue //只有提供的新值是正数,才允许修改 } def increment(step: Int): unit = { value += step}
def current(): Int = {value} } object Mycounter{ def main(args:Array[String]){ val mycounter = new counter println(mycounter.value)//打印value的初始值
mycounter.value = 3//为value设置新的值,会调用value_方法 println(mycounter.value) //打印value的新值 mycounter.increment(1)//这里设置步长为1,每次增加1println(mycounter.current) }