scala构造器

构造器的定义

每个类都有一个主构造器,这个构造器和类定义"交织"在一起类名后面的内容就是主构造器,
如果参数列表为空的话,()可以省略
scala的类有且仅有一个主构造器,要想提供更加丰富的构造器,就需要使用辅助构造器,辅助构造器是可选的,它们叫做this

注意:主构造器会执行类定义中的所有语句

例子一
class User { // 类默认有一个无参的主构造函数
}
val user = new User
例子二
class User2(val name: String, age: Int) { // 两个参数的主构造函数

}
val user2 = new User2("jim", 23)
user2.name // 使用val修饰的变量默认是成员变量对象可以访问
// user2.age   // age没有使用val或者var修饰 所以不能被访问
例子三
class User3 {
   var name: String = _
   var age: Int = _
  // 辅助构造函数
  def this(name: String, age: Int) {
    // 构造函数中的首行必须调用主构造函数或者其他构造函数
    this()
    this.name = name
    this.age = age
  }
  // 辅助构造函数
  def this(msg: String) = {
    // 首行调用一个构造
    this("ww", 12)
    println(msg)
  }
}
val u1 = new User3()
val u2 = new User3("")
val u3 = new User3("lisi", 23)
println(u3.name)

总结:

1,有两类构造器:主构造器,辅助构造器

2,构造器的定义位置  def this(){}

主构造器和类交织在一起class Student2(val name: String, var age: Int)

3, 辅助构造器是一个特殊的方法,定义在类中 def this(name:String,age:Int,gender:String)

4,辅助构造器,第一行必须调用主构造器(或者其他的辅助构造器)

5,辅助构造器的参数不能和主构造器的参数完全一致(参数个数,参数类型,参数顺序)

6,可以定义空参的辅助构造器,但是主构造器的参数必须进行初始化赋值

7,作用域:辅助构造器的作用域,只在方法中,主构造器的作用域是类中除了成员属性和

成员方法之外的所有范围(可以通过反编译查看源码)

构造器的参数说明

  1. 主构造器的参数没有使用var/val修饰 ,那么他的参数就是局部变量
  2. val修饰的构造函数的参数是类的成员私有属性 ,只读
  3. var修饰的构造函数的参数是类的私有成员属性 ,但是是可读可写的

你可能感兴趣的:(scala)