scala 主构造函数_Scala-构造函数
/*
scala的構造函數分為主構造函數和輔助構造函數。
一、主構造函數
在Scala中,每個類都有主構造函數,和類的定義交織在一起。
一個Scala類的主構造函數包括:1、構造函數的參數;2、類體中調用的方法;3、在類體中執行的語句和表達式。
如果類名之后沒有參數,則該類具備一個無參主構造函數,這樣一個構造函數僅僅是簡單地執行類體中的所有語句。
二、輔助構造函數
1.輔助構造函數的名稱為this,這主要是考慮到在C++和Java中,構造函數名與類名同名,當更改類名時需要同時修改構造函數名,因此使用this為構造函數名使程序可靠性更強;
2.每一個輔助構造函數都必須以一個對先前已定義的其他輔助構造函數或主構造函數的調用開始
三、Scala提供一個主構造函數和任意多個輔助構造函數
1.如果不指定主構造函數,編譯器將創建一個主構造函數的構造函數,所有類的主體的聲明都被視為構造函數的一部分。它也被稱為默認構造函數。
2.如果代碼只有一個構造函數,則可以不需要定義明確的構造函數。它有助于優化代碼,可以創建具有零個或多個參數的主構造函數。
3.必須要從輔助構造函數內部調用主構造函數。this關鍵字用于從其他構造函數調用構造函數。當調用其他構造函數時,要將其放在構造函數中的第一行。
4.在scala中,可以重載構造函數。
四、主構造函數的參數(類參數)
1.在主構造函數的參數列表中聲明的參數和在類體中聲明的變量本質上沒有任何不同;
2.如果只有var/val修飾,則字段總是對外可見的,即默認是public的
3.如果連var/val也沒有,則字段對外不可見,同時內部只讀,不可改寫,即默認是:private val
4.上一條不適用于case class,case class的類參數在不指定val/var修飾時,會自動編譯為public val,即對外只讀,如果需要case class的字段外部可寫,可以顯式地指定var關鍵字!
五、類字段的getter/setter
1.對于var修飾的參數:外部可讀/可改寫 (實際上是:編譯器為該類參數(字段)自動生成了getter和setter)
2.對于val修飾的參數:外部可讀/不可改寫(實際上是:編譯器為該類參數(字段)只生成了getter沒有生成setter)
3.對于private var修飾的參數:內部可讀/可改寫 (編譯器不會為私有類參數(字段)自動生成getter和setter)
4.對于private val修飾的參數:內部可讀/不可改寫 (編譯器不會為該類參數(字段)自動生成getter和setter)
*/
/*** 重寫 :可以重寫成員變量和成員方法(重寫字段或者方法)
* 子類繼承父類*/
classPerson(val name : String,var age : Int) {
println("The primarry constructor of Person")
val school= "BJU"def sleep= "8 hours"override def toString= "I am a person !"}/*** woker 繼承自person ,name,age,salary是woker的成員變量
* 子類必須把父類的主構造器中的參數都填充滿(和java不同:繼承時采用 super使用父類的成員)*/
class Worker(name : String ,age : Int ,val salary :Long ) extendsPerson(name,age){
println("This is the subClass of person,primary constructor of woker")
override val school= "Spark" //復寫字段或者是方法都要進行 添加重寫
override def toString= "I am a worker !" + super.sleep
}
object Person {
def main(args: Array[String]): Unit={//構建時 先構建父類
val w = new Worker("spark",5,100000)
println("School :" +w.school )
println(w.toString())
}
}
總結
以上是生活随笔為你收集整理的scala 主构造函数_Scala-构造函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python拷贝是什么知识点_地址对象p
- 下一篇: 二进制编译安装mysql_MariaDB