7.1簡單類和無參方法
通過class進行類的定義。
注:在Scala中,類并不聲明為Public,
一個Scala源文件可以包含多個類。所有這些類都具有公有可見性。
調(diào)用無參方法時,可以加(),也可以不加;
如果方法定義中不帶括號,那么調(diào)用時就不能帶括號。
7.2 Getter、Setter 方法
對于scala類中的每一個屬性,編譯后,會有一個私有的字段和相應(yīng)的getter、setter方法生成,
比如:
如果屬性為age,
那么getter方法名叫age,setter方法名為age_=
你也可以重定義getter、setter方法:
注意:
1、如果字段是私有的,則getter和setter 方法也是私有的。
2、如果字段是val,則只有g(shù)etter 方法被生成。
3、如果你不需要任何 getter或setter,可以將字段聲明為private[this].
7.3對象私有字段
private[this]定義對象私有的字段,不生成get、set方法。
7.4Bean屬性
JavaBeans規(guī)范定義了Java的屬性是像getXXX()和setXXX()的方法。許多Java工具都依賴這個命名習(xí)慣。
為了Java的互操作性。將Scala字段加@BeanProperty時,這樣的方法會自動生成。
Person將會生成四個方法:
1、name:String
2、name_=(new Value:String):Unit
3、getName():String
4、setName(new Value:String):Unit
7.5構(gòu)造器
Scala的類構(gòu)造器分為主構(gòu)造器和輔助構(gòu)造器。
1)主構(gòu)造器的參數(shù)直接放置在類名之后:
2)主構(gòu)造器會執(zhí)行類定義中的所有語句:
3)通過private設(shè)置主構(gòu)造器的私有屬性:
4)如果參數(shù)至少被一個方法使用,該參數(shù)將自動升格為字段,否則,該參數(shù)將不被保存為字段:
5)輔助構(gòu)造器名稱為this,通過不同參數(shù)進行區(qū)分,每一個輔助構(gòu)造器都必須以主構(gòu)造器或者已經(jīng)定義的輔助構(gòu)造器的調(diào)用開始:
7.6嵌套類
在Scala中,你幾乎可以在任何語法結(jié)構(gòu)中嵌套任何語法結(jié)構(gòu),在函數(shù)中定義函數(shù),在類中定義類。
Java中的內(nèi)部類從屬于外部類。Scala中每一個實例都有一個內(nèi)部類,內(nèi)部類從屬于實例。
注意:在內(nèi)嵌類中,你可以通過外部類.this的方式來訪問外部類的this引用。還可以對其進行命名訪問。
import org.scalatest.FunSuite
import scala.beans.BeanProperty
// class定義類,和java類似,不用聲明public
//1)主構(gòu)造器的參數(shù)直接放置在類名之后
class Chapter06Test(val name11: String = "", val age11: Int = 1) extends FunSuite {
var age = 0
private var value = 0
//private[this]定義對象私有的字段,不生成get、set方法。
private[this] var val123 = 0
//生成與java類似的set/get方法
@BeanProperty var name: String = _
def increment(): Unit = {
value += 1
}
def current() = value
test("core01") {
//類的定義如上所示
}
test("core02") {
//setter方法
// 對于scala類中的每一個屬性,編譯后,會有一個私有的字段和相應(yīng)的getter、setter方法生成,
// 比如: 如果屬性為age,
// 那么getter方法名叫age,setter方法名為age_=
val f = new Chapter16Test
//setter方法
// f.age=21
//getter方法
// println(f.age)
}
test("core03") {
// private[this]定義對象私有的字段,不生成get、set方法。
}
test("core04") {
}
test("core05") {
// 1)主構(gòu)造器的參數(shù)直接放置在類名之后
}
test("core06") {
// 在Scala中,你幾乎可以在任何語法結(jié)構(gòu)中嵌套任何語法結(jié)構(gòu)
}
//定義在一個類的內(nèi)部稱為嵌套類
class Member(val name: String) {
val contacts = Array(1, 2, 3)
}
}