我们在用Java的时候经常把一些字段定义为private类型来完成封装,这样外界就无法访问。
如果外界访问或者修改该字段的时候,只能通过该字段提供的getter和setter方法来实现。
在Scala中是没有getter和setter一说的。
用了value 和 value_= 来分别代替了getter和setter。
下面我们看个例子
class Counter{ private var privateValue = 0;//私有变量,外界无法直接访问 def value = privateValue;//定义一个方法,方法名为我们想要的字段的名称,代替getter def value_= ( newValue : Int ){//主语 value_= 是方法名字 value = newValue; } //注意,scala中默认方法是public的 } object MyCounter{ def main(args :Array[String]){ val myCounter = new Counter; println(myCounter.value);//调用value方法访问value,相当于getter myCounter.value = 3 ;//为value设置新值,相当于setter } }
注意,这里的value不是唯一名字,可以用别的名字。
def age = privateAge; def age_= (newAge :Int){ age = newAge;}
myAge.age;//访问age myAge = 3;//设置age为3
其实Scala是对每个字段自动生成getter和setter方法的,不过你可以控制这个过程如下:
■ 如果字段是私有的,则getter和setter方法也是私有的
就是说明,当我们定义一个字段为私有的时候,自动生成的getter和setter也不能被外界使用了。
就是我们不能在外界使用 点+字段 的方式来访问或者修改该字段了。
我们可以通过自己改写scala的getter和setter来完成对私有变量的访问和修改,如上述。
■ 如果字段是val,则只有getter方法被生成
当我们需要getter和setter的时候,可以定义变量为var
当我们只需要getter不需要setter的时候,我们可以定义变量为val
■ 如果你不需要任何getter或setter,可以将字段声明为private[this]