鍍金池/ 教程/ 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ù)類型的實現(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 修飾符
組合和繼承–實現(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 用來實現(xiàn)可疊加的修改操作

類和對象 (一)

有了前面的 Scala 基礎(chǔ),從本篇開始由淺到易逐步介紹 Scala 編程的各個方面,博客不可能做到面面俱到,還是希望你有些編程基礎(chǔ),尤其是有些面向?qū)ο蟮木幊袒A(chǔ),如 Java,C++,C# 等更好。除支持函數(shù)化編程外,Scala 也是一個純面向?qū)ο蟮木幊陶Z言。本篇和下篇介紹 Scala 的類和對象。

首先介紹 Scala 的類定義,我們以一個簡單的例子開始,創(chuàng)建一個計算整數(shù)累計校驗和的類

ChecksumAccumulator
class ChecksumAccumulator{
   private var sum=0
   def add(b:Byte) :Unit = sum +=b
   def checksum() : Int = ~ (sum & 0xFF) +1
}

可以看到 Scala 類定義和 Java 非常類似,也是以 class 開始,和 Java 不同的,Scala 的缺省修飾符為 public ,也就是如果不帶有訪問范圍的修飾符 public,protected,private,Scala 缺省定義為 public。類的方法以 def 定義開始,要注意的 Scala 的方法的參數(shù)都是 val 類型,而不是 var 類型,因此在函數(shù)體內(nèi)不可以修改參數(shù)的值,比如如果你修改 add 方法如下:

 def add(b:Byte) :Unit ={
       b=1
       sum+=b
   }

此時編譯器會報錯:

/root/scala/demo.scala:5: error: reassignment to val
 b=1
 ^
 one error found

類的方法分兩種,一種是有返回值的,一種是不含返回值的,沒有返回值的主要是利用代碼的“副作用”,比如修改類的成員變量的值或者讀寫文件等。Scala 內(nèi)部其實將這種函數(shù)的返回值定為 Unit(類同 Java 的 void 類型),對于這種類型的方法,可以省略掉“=”號,因此如果你希望函數(shù)返回某個值,但忘了方法定義中的“=”,Scala 會忽略方法的返回值,而返回 Unit。

再強調(diào)一下,Scala 代碼無需使用“;”結(jié)尾,也不需要使用 return返回值,函數(shù)的最后一行的值就作為函數(shù)的返回值。

但如果你需要在一行中書寫多個語句,此時需要使用“;”隔開,不過不建議這么做。你也可以把一條語句分成幾行書寫,Scala 編譯器大部分情況下會推算出語句的結(jié)尾,不過這樣也不是一個好的編碼習(xí)慣。