8.Scala-對象

第8章 對象

8.1 單例對象

Scala 中沒有靜態方法和靜態字段, 你能夠用 object 這個語法結構來達到一樣的目的。
class Man private(val sex: String, name: String){
  
  def describe = { println("Sex:" + sex + "name:" + name) } } object Man{ var instance: Man = null def apply(name: String)={ if(instance == null){ instance = new Man("男", name) } instance } }

 

對象構造器在該對象第一次使用時調用。若是對象沒有使用過,他的構造器不會被執行。app

對象基本具備類的全部特性,就是一點,你不能設置構造器的參數。 測試

測試:spa

val man1 = Man("Nick")
val man2 = Man("Thomas")
man1.describe
man2.describe

 

 

 

 

8.2 伴生對象

Java 中會有類既有實例方法又有靜態方法的類。Scala 中能夠經過伴生對象進行實現。
以下:
class Account {
  val id = Account.newUniqueNumber()   private var balance = 0.0   def deposit(amount: Double) { balance += amount }   def description = "Account " + id + " with balance " + balance } object Account { // The companion object   private var lastNumber = 0   private def newUniqueNumber() = { lastNumber += 1; lastNumber } }

 

測試:code

val acct1 = new Account
val acct2 = new Account acct1.deposit(1000) val d1 = acct1.description val d2 = acct2.description

 

 尖叫提示:對象

類和它的伴生對象能夠相互訪問私有特性,他們必須存在同一個源文件
中。必須同名

 

8.3 Apply 方法

1)apply 方法通常都聲明在伴生類對象中,能夠用來實例化伴生類對象:blog

class Man private(val sex: String, name: String){

  def describe = { println("Sex:" + sex + "name:" + name) } } object Man{ def apply(name: String)={ new Man("男", name) } }

 

測試:ip

val man1 = Man("Nick")
val man2 = Man("Thomas") man1.describe man2.describe

 

 

2)也能夠用來實現單例模式,咱們只須要對上述例子稍加改動:it

看上面 8.1 單例模式

 

 

 

 

 

8.4 應用程序對象

每個 Scala 應用程序都須要從一個對象的 main 方法開始執行,這個方
法的類型爲 Array[String]=>Unit。
object Hello {
    def main(args: Array[String]) {
        println("Hello, World!") } }

 

 或者擴展一個App特徵:io

object ObjectSyllabus extends App{

  if(args.length > 0) println("hello," + args(0)) else println("hello,world!") }

 

 

 

 

8.5 枚舉

Scala 中沒有枚舉類型,定義一個擴展 Enumeration 類的對象,並以 value
調用初始化枚舉中的全部可能值。
object TrafficLightColor extends Enumeration {
    val Red = Value(0, "Stop") val Yellow = Value(10) // Name "Yellow" val Green = Value("Go") // ID 11 }

 測試:ast

println(TrafficLightColor.Red)
println(TrafficLightColor.Red.id)
println(TrafficLightColor.Red.toString)
相關文章
相關標籤/搜索