8.1 對象
- 單例對象
- 伴生對象
- 擴展類和特質(zhì)
- 構(gòu)造一個擴展了指定類和特質(zhì)的類的對象,同時擁有對象定義中給出的所有特性
- apply方法
8.1.1 單例對象
- object語法定義了某個類的單個實例
- 對象的構(gòu)造器在該對象第一次被使用時調(diào)用
- object語法結(jié)構(gòu)與class大致相同,除了object不能提供構(gòu)造器參數(shù)
- 通常使用單例對象的環(huán)境:
- 作為存放工具函數(shù)或常量的地方
- 共享單個不可變實例
-
利用單個實例協(xié)調(diào)某個服務(wù)
8.1.2 伴生對象
- 當一個單例對象存在同名類的時候,稱為伴生對象
- class HELLOWORLD{...}
- objectHELLOWORLD{...}
- 類和其伴生對象可以互相訪問私有屬性,但必須存在同一個源文件中
- 類的伴生對象可以被訪問,但并不在作用域中,如;
- class HELLOWORLD{...}
- object HELLOWORLD{ def NOW{...} }
- HELLOWORLD 類必須通過HELLOWORLD.NOW調(diào)用伴生對象中的NOW方法,而不能直接用NOW來調(diào)用
8.1.3 Apply方法
- 需要構(gòu)造有參數(shù)需求的伴生對象時,可定義并使用apply方法
class HELLOWORLD(var m:String,n:Char){...}
object HELLOWORLD{
def apply(n:Char)=new HELLOWORLD("",n)
}
val hi=HELLOWORLD('j')
8.2 繼承-1
- 拓展
- 重寫
- 抽象
8.2.1 拓展
- extends是Scala中實現(xiàn)繼承的保留字
- class week extends month{...}
- week類繼承了month類所有非私有成員
- week類是month類的子類,month類是week類的超類
- 子類能重寫超類的成員(具有相同名稱和參數(shù))
- class week(val num:Int) extendsmonth(var no.:Int){...}
- object day extendsweek{...}
- 單例對象同樣能從類中繼承,與類的繼承語法相同
8.2.2 重寫
- Scala中使用override保留字進行方法、字段重寫
- class week extends month{
- override def firstday = {...}
- }
- override保留字實際使用類似于private,聲明這個保留字后的定義、聲明是對超類的重寫,因此,其也可以寫在類定義的參數(shù)中
- class week(override val lastday:String)extends month{...}
- 子類的重寫或修改Scala會檢查其超類,但是,超類的修改并不會檢查其子類
- 重寫包括字段和方法,但參數(shù)不同的方法可以不重寫
- class month{ def secondday(m:String)={...}}
- class week extends month{ def secondday ={...}}
8.2.2.1 重寫規(guī)則
- 重寫def
- 用val :利用val能重寫超類用沒有參數(shù)的方法(getter)
- 用def:子類的方法與超類方法重名
- 用var:同時重寫getter、setter方法,只重寫getter方法報錯
- 重寫val
- 用val:子類的一個私有字段與超類的字段重名,getter方法重寫超類的getter方法
- 重寫var
- 用var:且當超類的var是抽象的才能被重寫,否則超類的var都會被繼承
8.2.2.2 重寫示例
- class month{
- val one = 25 //可在子類中用val重寫
- var two = 15 //不可在子類中用var重寫,因為不是抽象的
- var three:Int
- def firstday = //可在子類中用val重寫
- def now = //可在子類中用var重寫
- def now_ =
- def lastday(m:Char)={} //可在子類中用def重寫
- }
- 子類中,def只能重寫超類的def,val能重寫超類的val或不帶參數(shù)的def,var只能重寫超類中抽象的var或者超類的getter/setter對
8.2.3 抽象
- 不能被實例化的類叫做抽象類
- 抽象類的某個或某幾個成員沒有被完整定義,這些沒有被完整定義的成員稱為抽象方法或抽象字段
- 用abstract保留字標記抽象類
- abstractyear{
- val name:Array[String] //抽象的val,帶有一個抽象的getter方法
- var num:Int //抽象的var,帶有抽象的getter/setter方法
- def sign//沒有方法體/函數(shù)體,是一個抽象方法
- }
- 只要類中有任意一個抽象成員,必須使用abstract標記
- 重寫抽象方法、抽象字段不需要使用override保留字
大數(shù)據(jù)視頻推薦:
騰訊課堂
CSDN
大數(shù)據(jù)語音推薦:
企業(yè)級大數(shù)據(jù)技術(shù)應(yīng)用
大數(shù)據(jù)機器學(xué)習(xí)案例之推薦系統(tǒng)
自然語言處理
大數(shù)據(jù)基礎(chǔ)
人工智能:深度學(xué)習(xí)入門到精通
