Scala 构造器和Java的构造方法有相似之处,Scala 构造器分为主构造器和附属构造器,主构造器只有一个,附属构造器可以有无数个。
主构造器
在我们对一个类实例化的时候,一定会调用主构造器,或显式调用或隐式调用的区别而已。
定义一个主构造器
class 类名(....)
主构造器可以携带参数列表,也可以不携带参数列表,例如很多类在定义的时候可能不会带有参数,这时类的主构造器就没有参数。
附属构造器
1. 附属构造器的名称统一为 this ;
2. 每一个附属构造器都必须显式地调用其它附属构造器或者主构造器。
DEMO
/** * class 类名(....) 在Scala中叫做主构造器 * * 附属构造器 */ class Person(val name:String, val age:Int) { // 默认也把括号中定义的东西转成属性 println("Person Constructor enter...") val school = "pku" var gender:String = _ /** * 附属构造器 * 1) def this定义的叫做附属构造器 * 2) 一个附属构造器中第一行必须要调用主构造器或者其他附属构造器 */ def this(name:String, age:Int, gender:String) { this(name, age) // 调用主构造器 this.gender = gender } // 默认class里面是有一个toString override def toString() = "父类的toString方法" println("Person Constructor leave...") }