Scala构造器的介绍
和 java 一样, Scala 构造对象也需要调用构造方法,并且可以有任意多个构造方法(即 Scala 中构造器也支持重载)
scala 类的 构造器包括: 主构造器 和 辅助构造器
代码演示如下
// 在构造器中传递的参数可以用 val,var 修饰,会成为类的成员变量
class Boy(val name:String ,var age :Int) {
var gender :String =_ // 对应类型变量的初始默认值
var fv: Double =_
// 定义辅助构造器 ,辅助构造器一定要用 def this ,
// 辅助构造器一定要调用主构造器或其他的构造器(其他的构造器 一定调用主构造器)
// 辅助构造器的方法中的参数不用加var,val进行修饰
def this(name:String,age:Int,gender: String){
this(name,age)
this.gender =gender
}
def this(name:String ,age: Int ,gender: String ,fv: Double){
this(name,age)
this.fv=fv
}
}
// 不用 var ,val 修饰的只是形参
class Boy2(name:String ,age:Int){
}
object Boy{
def main(args: Array[String]): Unit = {
val b = new Boy("tom",20,gender = "female")
println(b.gender)
println(b.name)
println(b.age)
val b1 = new Boy2("jary",29)
}
}
Scala 构造器注意事项和细节
1) Scala 构造器作用是完成对新对象的初始化,构造器没有返回值\
2)主构造器的声明直接放置在类名值后
3)主构造器会执行类定义中的所有的语句,这里可以体会到Sala的函数式编程和面向对象融合在一起
即:构造器也是方法(函数),传递
4)如果主构造器无参数 ,小括号可以省略 ,构建对象时调用的构造方法的小括号也可以省略
5)辅助构造器名称为 this (这个和 java 是不一样的),多个辅助构造器通过不同参数列表进行区分,在底层就是 f 构造器重载
6)如果想让主构造器变成私有的 ,可以在()之前加上 private ,这样用户只能通过辅助构造器来构造对象了
class Person private(){}
7)辅助构造器的声明不能和主构造器的声明一致 ,会发生错误(即构造器名重复)