本章要點概覽:
用對象作爲單例或存放工具方法。
- 類可以擁有一個同名的伴生對象。
- 對象可以擴展類或特質。
- 對象的apply方法通常用來構造伴生類的新實例。
- 如果不想顯示定義main方法,可以用擴展App特質的對象。
- 可以通過擴展Enumeration對象來實現枚舉。
6.1 單例對象
object Accounts{
private var lastNumber = 0
def newUniqueNumber() = { lastNumber += 1;lastNumber }
}
當在應用程序中需要一個新的唯一賬號時,調用Accounts.newUniqueNumber()即可。- 作爲存放工具函數或常量的地方。
- 高效地共享單個不可變實例。
- 需要用單個實例來協調某個服務時(參考單例模式)。
class Account{
6.2 伴生對象
class Account{
val id = Account.newUniqueNumber()
private var balance = 0.0
def deposit(amount: Double) { balance += amount }
......
}
object Account{ //伴生對象
private var lastNumber = 0
private def newUniqueNumber() = { lastNumber += 1; lastNumber }
}
類和它的伴生對象可以相互訪問私有特性。它們必須存在於同一個源文件中。