鍍金池/ 教程/ Scala/ 所有類的公共子類–底層類型
包對象
Ordered Trait
組合和繼承–定義 final 成員
基本數(shù)據(jù)類型
Match 表達(dá)式
類和對象 (三)
操作基本數(shù)據(jù)類型
for 表達(dá)式
組合和繼承–重載成員函數(shù)和方法
類和對象 (二)
組合和繼承–定義 factory 對象
組合和繼承–多態(tài)和動態(tài)綁定
Trait 的基本概念
if 表達(dá)式
組合和繼承–抽象類
函數(shù)–函數(shù)字面量的一些簡化寫法
while 循環(huán)
組合和繼承–使用組合還是繼承?
訪問控制修飾符
Trait 示例–Rectangular 對象
組合和繼承–定義參數(shù)化成員變量
組合和繼承–定義無參數(shù)方法
類和對象 (一)
函數(shù)–閉包
函數(shù)–類成員函數(shù)
Scala 基本數(shù)據(jù)類型的實(shí)現(xiàn)方法
try 表達(dá)式處理異常
選擇瘦接口還是胖接口設(shè)計?
組合和繼承–小結(jié)
創(chuàng)建新的控制結(jié)構(gòu)
使用 import
為訪問控制修飾符添加作用域
Scala 的類層次關(guān)系
類和對象 (五)
傳名參數(shù)
柯里化函數(shù)
函數(shù)–頭等公民
組合和組合和繼承–定義 heighten 和 widen 函數(shù)
使用 Package–將代碼放入包中
隱含的 import
所有類的公共子類–底層類型
進(jìn)一步 Scala
函數(shù)–局部函數(shù)
引用包中的代碼
組合和繼承–使用 override 修飾符
組合和繼承–實(shí)現(xiàn)類 Element 的 above,beside 和 toString()方法
類和對象 (四)
函數(shù)–尾遞歸
沒有“break”和“continue”的日子
組合和繼承–調(diào)用基類構(gòu)造函數(shù)
減低代碼重復(fù)
函數(shù)–函數(shù)–可變參數(shù),命名參數(shù),缺省參數(shù)
起步 Scala
組合和繼承–擴(kuò)展類
函數(shù)–部分應(yīng)用的函數(shù)
開始神奇的 Scala編程之旅
組合和繼承–概述
Trait 用來實(shí)現(xiàn)可疊加的修改操作

所有類的公共子類–底層類型

前面我們給出了 Scala 的類的一個關(guān)系圖:

http://wiki.jikexueyuan.com/project/scala-development-guide/images/17.png" alt="" />

在這張圖的最下方我們可以看到有兩個類,scala.Null 和 scala.Nothing。 這兩個類的作用是 Scala 支持統(tǒng)一方式用來處理面向?qū)ο蟮囊恍┻吔乔闆r。因為它們在類層次圖的下方,因此也稱為底層類型。

類 Null 代表 null 引用,它是所有引用類(每個由 AnyRef 派生的類)的子類。Null 和值類型不兼容,也就是比如說,你不能把 null 賦值給一個整數(shù)類型變量:

scala> val i:Int=null
<console>:7: error: an expression of type Null is ineligible for implicit conversion
       val i:Int=null

Nothing 類型為圖中類層次關(guān)系的最下方,它是所有其他類的子類,然而這個類型沒有任何實(shí)例(也就是沒有任何值對應(yīng) Nothing 類型)前面提到,Nothing 類型的一個用法是示意應(yīng)用程序非正常終止,比如 Predef 的有一個 error 方法:

def error(message:String) :Nothing =
  throw new RuntimeException(message)

error 的返回類型就是 Nothing,告訴調(diào)用者該方法沒有正常退出(拋出異常)。正因為 Nothing 為所有其它類型的子類,你可以靈活使用如 error 這樣的函數(shù)。比如:

def divide(x:Int,y:Int):Int=
  if(y!=0) x/y
  else error("Cannot divide by Zero")

if “then”分支的類型為 Int(x/y),else 分支的類型為 error 返回值,其類型為 Nothing,因為 Nothing 為所有類型的子類,它也是 Int 的子類,因此 divide 的類型為 Int。