Scala:統(tǒng)一的對(duì)象模型


圖片展示了Scala的類層次結(jié)構(gòu)。每一個(gè)類都繼承自scala.Any,Any的子類可以劃分為兩個(gè)主要的范疇:值類型,繼承自scala.AnyVal;引用類型,繼承scala.AnyRef。

每一種Java的基本數(shù)據(jù)類型對(duì)應(yīng)于值類型,通過預(yù)定義的類型別名進(jìn)行映射,而AnyRef則對(duì)應(yīng)于Java環(huán)境中的根類:java.lang.Object。

需要注意的是值類型類空間是平行的,即所有的值類型都繼承自scala.AnyVal,但是值類型之間不存在任何關(guān)系,比如繼承關(guān)系。作為替代,值類型之間有視圖(隱式類型轉(zhuǎn)換)。

整個(gè)類層次最底層有兩個(gè)類型,scala.Null和scala.Nothing。Null是所有引用類型的子類,它只有一個(gè)實(shí)例null。
由于Null不是任何值類型的子類,所以null也不是任何值類型的實(shí)例,因此把null賦值給int型變量是錯(cuò)的。Nothing是所有其它類型的子類,這個(gè)類沒有任何實(shí)例,但是它可以作為類型參數(shù)體現(xiàn)價(jià)值,比如Nil就是List[Nothing]的實(shí)例,而Scala中List是協(xié)變的,從而對(duì)于所有的類型T,Nil
都是List[T]的實(shí)例。
測(cè)試List是協(xié)變的代碼如下:

class Person 
class Student extends Person 
val lst: List[Person] = List[Student](new Student) //程序沒有問題,可以說明List是協(xié)變的

關(guān)于==,equals,eq:在Scala中,==相當(dāng)于是equals的別名,用于比較值是否相等,而eq
用于比較引用是否相等:

val a = List(1, 2, 3) 
val b: List[Int] = List(1, 2, 3) 
println(a == b) //true 
println(a equals b) //true 
println(a eq b) //false
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 本文是對(duì)Scala語(yǔ)言的基本語(yǔ)法的一個(gè)學(xué)習(xí)總結(jié),共包括如下章節(jié): 基本元素 結(jié)構(gòu)化語(yǔ)句 數(shù)據(jù)類型 小結(jié) 參考資料:...
    我是老薛閱讀 988評(píng)論 0 3
  • Scaladoc是什么:scala api文檔,包含了scala所有的api以及使用說明,class、object...
    義焃閱讀 2,632評(píng)論 0 1
  • scala 是一個(gè)強(qiáng)類型的語(yǔ)言,但是在編程時(shí)可以省略對(duì)象的類型. java中對(duì)象類型(type)與類(class)...
    Tim在路上閱讀 2,886評(píng)論 0 2
  • 控制復(fù)雜性是計(jì)算機(jī)編程的本質(zhì)。-- Brian Kernigan Scala繼承體系結(jié)構(gòu)設(shè)計(jì)非常巧妙,它沒有特殊地...
    劉光聰閱讀 3,146評(píng)論 0 8
  • 1. 特點(diǎn): Scala是一門多范式編程語(yǔ)言,集成了面向?qū)ο缶幊毯秃瘮?shù)式編程等多種特性。 Scala運(yùn)行在虛擬機(jī)上...
    EmmaQin閱讀 1,329評(píng)論 0 0