定義類:
我們先看如何定義一個實現‘字節校驗和’類定義代碼:
package scala
import scala.collection.mutable.Map
class ChecksumAccumulator {
private var sum = 0;
def add(b: Byte) = sum += b
def checksum() = ~(sum & 0xFF) + 1
}
如何運行程序:
錯誤方式:
根據Java經驗,加入main 方法,無法運行。
package scala
import scala.collection.mutable.Map
class ChecksumAccumulator {
private var sum = 0;
def add(b: Byte) = { sum += b }
def checksum() = ~(sum & 0xFF) + 1
def main(args: Array[String]) {
for (arg <- args) {
arg.foreach(c => add(c.toByte))
println(checksum())
}
}
}
正確方式1:
把程序定義成object。
package scala
object Summer {
def main(args: Array[String]) {
val ck = new ChecksumAccumulator()
for (arg <- args) {
arg.foreach(c => ck.add(c.toByte))
println(ck.checksum())
}
}
}
正確方式2:
定義一個新的object, 生成ChecksumAccumulator 類對象並使用。
package scala
import scala.collection.mutable.Map
object ChecksumAccumulator {
private var sum = 0;
def add(b: Byte) = { sum += b }
def checksum() = ~(sum & 0xFF) + 1
def main(args: Array[String]) {
for (arg <- args) {
arg.foreach(c => add(c.toByte))
println(checksum())
}
}
}
class 和 object 的區別:
class 定義類,就像對象的模子。object 在scala裏面叫單例對象,不可以通過new 方式生成新的對象,因此object定義的就是個對象。
如果object名字與某個class名字一樣,object 就叫做class的伴生對象,class叫做object的伴生類。因此單例對象可以沒有相對應的伴生類。
下一篇將通過例子具體瞭解。