Scala中的構造器相較於Java比較特殊,分為兩種:主構造器,從構造器。主構造器是和類中字段和方法的定義混合在一起的。
在Scala中,不需要像Java一樣需要在類中定義一個與類名相同的方法來當作構造器。
主構造器的參數列表寫在類名的后面,而構造器的內容,則直接寫在類定義里面,所以說,一個Scala類里面,除了方法和字段的定義以外的代碼,全都是主構造器的內容。
class Fruit(n: String, w: Int) { val name = n val weight = w println("This is a " + n)
println("Weight = " + w) }
如果接下來定義一個Fruit對象。
val apple = new Fruit("Apple", 10)
則會在屏幕上打印:
This is a Apple
Weight = 10
因為
println("This is a " + n)
println("Weight = " + w)
兩行代碼也是構造函數中的內容。
除了主構造器外,Scala中還有從構造器,用於使用和主構造器不同的參數來初始化對象。
從構造器的定義,都為def this開始。
例如,如果Fruit的默認重量為10。
class Fruit(n: String, w: Int) { val name = n val weight = w println("This is a " + n) println("Weight = " + w) def this(n: String) = this(n, 10) }
val orange = Fruit("Orange")
Scala上的從構造器也有一定的限制,Scala編程中寫道。
“Scala 里的每一個從構造器的第一個動作都是調用同一個類里面其他的構造器。換句話說
就是,每個 Scala 類里的每個從構造器都是以“this(...)”形式開頭的。被調用的構造
器既可以是主構造器(好像 Rational 這個例子),也可以是從文本上來看早於調用構造器
的其它從構造器。這個規則的根本結果就是每一個 Scala 的構造器調用終將結束於對類的
主構造器的調用。因此主構造器是類的唯一入口點。”