主构造器的参数
Scala 类的主构造器函数的形参包括三种类型:
没有修饰符修饰,这个参数就是一个 局部变量
var修饰参数,作为类的 属性 使用,可以修改(推荐)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)
}
}
