第六章 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 tes41new 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())
 
posted @ 2017-12-26 21:01  瀚海行舟  阅读(166)  评论(0编辑  收藏  举报