第六章 Scala类的操作
1:类的声明 (class中c是小写)
//注意class c是小写
//类里面定义一个字段,scala会自动给我们生成 getter,setter方法,如下面的类,自动生成的setter,getter名称分别为momet_=,momet
使用var定义才有get,set方法
如果使用val定义,就没有set方法
使用@BeanProperty 定义变量可以像java那样设置和取值 @BeanProperty var nonet=10
定义一个使用变量也是和java一样 使用 private var cocet=10
但是private 不能和@BeanProperty同时使用
//注意class c是小写
//类里面定义一个字段,scala会自动给我们生成 getter,setter方法,如下面的类,自动生成的setter,getter名称分别为momet_=,momet
class test41{
var momet=10
//这种定义可以想java中那种set,和get的方式
@BeanProperty var nonet=10
//这个是使用的private和@BeanProperty不能同时使用
private var cocet=10
}
object scalacal extends App {
var tes41= new test41()
println( tes41.momet)
tes41.momet=300 //这种是用setter的简写
println(tes41.momet)
//这种就是用自动生成的方法名设置值,因为是方法,所以400要用括号
tes41.momet_=(400)
println("setter方法名设置值"+tes41.momet)
//使用@BeanProperty定义的变量
tes41.setNonet(600)
println(tes41.getNonet())
}
2:自定义get和set方法 (保护类内部变量,不被随意修改)
class test42{
private var momet=10
//只能本类调用,禁止作为参数传递
private[this] var nonet=0
//自己实现set
def setMomet(a:Int){
this.momet=a
}
//自己实现get
def getMomet()={
this.momet
}
//自增私有变量
def Add(a:test42){
this.momet+=a.momet
//这里是取不到 a.nonet因为nonet被加了this,只能本类使用,而且禁止作为参数传递
}
}
object scalacal extends App {
//自定义set,get方法设置和取值
var test42=new test42();
test42.setMomet(120)
println(test42.getMomet())
}
3:类的构造器
//类的构造器(主构造器)
class test46(a:Int=1,b:Int=1){
var c:Int=3
var d:Int=4
var e:Int=4
//辅助构造器不能和主构造器参数相同,不然确定不了用那个构造器
/* //比如这面这个 是报错的
def this(c:Int,d:Int){
this() //辅助构造器必须调用主构造器
this.c=c
}*/
def this(c:Int,d:Int,e:Int){
this() //辅助构造器必须调用主构造器(而且还可以调用其他辅助构造器)
this.c=c
}
//在scala中 这个类可以看做是一个方法,(类可以看做是方法嵌套方法,所以下面的这个打印,在new的时候会直接执行)
//类和方法是交织在一起的
println("aa:"+a+"_"+c)
//如果是煮构造器这个地方的a是主构造器传递的值,如果是辅助构造器的话,这个地方c打印的是默认值
//说明类的执行顺序是: 类->主构造器->字段,属性->辅助构造器->函数
}
类属性set和get的简写
// var te46=new test46(46,33,55);
//自定义set,get方法设置和取值
var test42=new test42();
test42.setMomet(120)
//这种是set的简写
test42 setMomet 160
println(test42.getMomet())