Scala - 类构造器

Scala 构造器可分为两种,主构造器和辅助构造器。

主构造器

1
2
3
4
5
6
7
8
9
// 无参主构造器
class Demo {
// 主构造器的构成部分
}

// 有参主构造器
class Demo2(name: String, age: Int) {
// 主构造器的构成部分
}

从类的定义开始,花括号的部分为主构造器的构成部分。主构造器在执行时,会执行类中所有的语句。

1
2
3
4
5
6
7
8
9
10
11
// example
class Demo() {
val name = "tom"
val age = 18

doSomething() // 初始化对象时,会打印 name: tome, age: 18

def doSomething() = {
println("name: " + name + ", age: " + age)
}
}

辅助构造器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Demo {
var name = ""
var age = 0

// 错误定义!!
def this() {
}

def this(name: String) {
this()
this.name = name
}

def this(name: String, age: Int) {
this(name)
this.age = age
}
}

辅助构造器的名称为this,与 Java 的构造器名称不同(Java 构造器名称是以类名定义的),其代码大致结构为def this(...) {}。若一个类如果没有显式定义主构造器,则编译器会自动生成一个无参的主构造器。

必须注意的是,每个辅助构造器都必须以一个对先前已定义的其他辅助构造器或者主构造器的调用开始。