定义不带private的var变量,此时scala生成面向jvm的类,会定义为private的name,并提供public的get和set方法
如果使用private修饰变量,则生成的get和set方法也是private
如果定义val 变量,则只会生成get方法
如果不希望生成get和set方法,可以声明为 private [this],需要自己定义get和set方法
class Student {
private var myName = "candle"
//getter
def name = {
println("this is getter")
myName
}
//setter
def name_=(newName:String) {
println("this is setter")
myName = newName
}
def info() {println(myName)}
}
注意:
a.scala使用这种getter和setter方法,getter方法名和setter是要一致,只是setter方法名加上_
b.setter方法 def name_=(newName:String) 而不是def name_(newName:String) =,这种写法是声明了一个 name_函数
c.scala 默认对于成员,系统会自动添加一个同名的setter和getter方法。
实例01,scala风格
class Student {
private var myName = "candle"
//getter
/*def name = {
println("this is getter")
myName
}*/
def name=myName//简写
//setter
/* def name_=(newName:String) {
println("this is setter")
myName = newName
}*/
def name_=(newName:String)=myName = newName//简写
def info() {println(myName)}
}
object Student{
def main(args: Array[String]): Unit = {
var s=new Student()
s.name="asdf"
s.info()
}
}
实例02:注解形式
import scala.reflect.BeanProperty
class Student {
@BeanProperty
var name = "aaa"
}
系统会为对象自动添加 getName 和setName这两个函数,和java风格类似
实例03:java风格
class HelloWord {
private var name = "candle"
def getName = name
def setName(newName:String) = {name=newName}
def hello() {println("hello" +name)}
}