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