Scala中的構造器相較於Java比較特殊,分爲兩種:主構造器,從構造器。主構造器是和類中字段和方法的定義混合在一塊兒的。編程
在Scala中,不須要像Java同樣須要在類中定義一個與類名相同的方法來看成構造器。app
主構造器的參數列表寫在類名的後面,而構造器的內容,則直接寫在類定義裏面,因此說,一個Scala類裏面,除了方法和字段的定義之外的代碼,全都是主構造器的內容。函數
class Fruit(n: String, w: Int) { val name = n val weight = w println("This is a " + n)
println("Weight = " + w) }
若是接下來定義一個Fruit對象。ui
val apple = new Fruit("Apple", 10)
則會在屏幕上打印:this
This is a Applespa
Weight = 10code
由於對象
println("This is a " + n)
println("Weight = " + w)
兩行代碼也是構造函數中的內容。blog
除了主構造器外,Scala中還有從構造器,用於使用和主構造器不一樣的參數來初始化對象。it
從構造器的定義,都爲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 的構造器調用終將結束於對類的主構造器的調用。所以主構造器是類的惟一入口點。」