scala教程:构造器的参数

主构造器的参数

Scala 类的主构造器函数的形参包括三种类型:

  1. 没有修饰符修饰,这个参数就是一个 局部变量

  2. var 修饰参数,作为类的 属性 使用,可以修改(推荐)

  3. val 修饰参数,作为类 只读属性 使用,不能修改

例子1

主构造方法的形参由 var、val 修饰,也就成了 类的属性

// Phone类看起来像函数,体现出 scala是函数式 编程语言
class Phone (var cpu:String,val ram:Int) {

  println("主构造方法")

}

object Phone{
  def main(args: Array[String]): Unit = {

    val phone2:Phone = new Phone("A100",16)
    println(phone2.cpu)
    phone2.cpu = "骁龙900"
//    phone2.ram = 16 //由val修饰,不能修改值
    println(phone2.cpu)
    println(phone2.ram)

  }
}

执行流程:

例子2

主构造器形参没有 var、val 修饰,表示局部变量,而不是属性

//没有val、var修饰,表示局部变量,不是类的属性
class Phone (cpu:String,ram:Int) {
  //在类的内部可以访问局部变量 cpu
  println(s"主构造方法,cpu=$cpu")

  def call():Unit = {
    //在类的内部可以访问局部变量 cpu
    println( s"用 $cpu 打电话")
  }

}

object Phone{
  def main(args: Array[String]): Unit = {

    val phone2:Phone = new Phone("A100",16)
    println(phone2.cpu) //报错,因为不是类的属性,所以不能访问
    println(phone2.ram) //报错,因为不是类的属性,所以不能访问

  }
}

主构造器使用 @BeanPropetry 注解

在 主构造器 形参前面加上 @BeanProperty 注解,同时会生成 set、get 方法

class Phone (@BeanProperty var cpu:String,val ram:Int) {
  println("主构造方法")
}

辅助构造器的参数

辅助构造器的形参不能加 var、val,否则报错

注意: 辅助构造器 和 主构造器的 参数列表 不能一致,否则报错

例子

主构造器和辅助构造器都有参数

class Phone (var cpu:String,var ram:Int) {

  println("主构造方法")
  def this(cpu:String) { //辅助构造器形参不能与主构造器相同
    this(cpu,8)
    println("辅助构造器")
  }

}

object Phone{
  def main(args: Array[String]): Unit = {

    val phone:Phone = new Phone("A100",16) //调用主构造器
    val phone2:Phone = new Phone("麒麟1000") //调用辅助构造器
    println(phone2.cpu)
    println(phone2.ram)

  }
}

原文出处:/show_1IX1CtyjvGHM.html