scala的构造函数分为主构造函数和辅助构造函数
【辅助构造函数】比较容易理解,它们同C++和Java的构造函数十分类似,只有两处不同:
1、辅助构造函数的名称为this,这主要是考虑到在C++和Java中,构造函数名与类名同名,当更改类名时需要同时修改构造函数名,因此使用this为构造函数名使程序可靠性更强;
2、每一个辅助构造函数都必须以一个对先前已定义的其他辅助构造函数或主构造函数的调用开始。如:
class Time {
private var hr = 0
private var min = 0
def this (hr : Int) {
this () //调用主构造函数
this.hr = hr
}
def this (hr : Int, min : Int) {
this (hr) //调用辅助构造函数
this.min = min
}
}
//可以以以下三种方式构造对象:
val t1 = new Time
val t2 = new Time(16)
val t3 = new Time(16, 27)
【主构造函数】在Scala中,每个类都有主构造函数。主构造函数并不以this方法定义,而是和类的定义交织在一起。 一个Scala类的主构造函数是以下的组合:
1、构造函数参数;
2、在类内部被调的方法;
3、在类内部执行的语句和表达式。
class Person (var firstName : String, var lastName : String) { //构造函数参数
println("the constructor begins")
var age = 0
override def toString = s"lastName is $age years old"
def printFullName {print(this)}
printFullName //被调的方法
println("still in the constructor")
}
如果类名之后没有参数,则该类具备一个无参主构造函数,这样一个构造函数仅仅是简单地执行类体中的所有语句而已。
//Scala默认主构造函数示例
class Student{
println("Hello from default constructor");
}
//Scala主构造函数示例
class Student(id:Int, name:String){
def showDetails(){
println(id+" "+name);
}
}
网友评论