1. 程式人生 > >8、scala面向對象編程之對象

8、scala面向對象編程之對象

args tostring name 時間 scala hello 工作原理 而是 main方法

1、 Object

2、伴生對象

3、讓object繼承抽象類

4、apply方法

5、main方法

6、用object實現枚舉功能

1、 Object

  Object,相當於class的單個實例,通常在裏面放一些靜態field或者method。

  第一次調用object方法時,會執行object的constructor,也就是object內不在method中的代碼,但是object不能定義接受參數的constructor。

  Object的constructor只會在其第一次被調用時執行一次,以後再次調用就不會再次執行constructor了。

  通常object用於單利模式的實現,或者放class的靜態成員,比如工具方法。

  技術分享圖片

2、伴生對象

  如果有一個class,還有一個與class同名的object,那麽就成這個object是class的伴生對象,class是object的伴生類。

  伴生類和伴生對象必須存放在一個.scala文件中。

  伴生類和半生對象,最大的特點就在於,互相可以訪問private field。

  技術分享圖片

3、讓object繼承抽象類

  Object功能其實和class類似,除了不能接受定義接受參數的constructor之外,object也可以繼承抽象類,並覆蓋抽象類中的方法。

  技術分享圖片

4、apply方法

  Object中非常重要的一個特殊方法,就是apply方法。通常在伴生對象中實現apply方法,並在其中實現構造伴生類的對象的功能。而創建伴生類的對象時,通常不會使用new Class 的方式,而是使用Class()的方式,隱式調用伴生對象的apply方法,讓對象創建更加簡潔。

  技術分享圖片

5、main方法

  和java一樣,如果運行一個程序,必須編寫一個包含main方法類一樣,scala中如果運行一個應用程序,也必須有一個main方法,作為入口。

  Scala中main方法定義為def main(args:Array[String]),而且必須定義在object中。

  新建一個文件HelloWorld.scala,寫入以下內容:

  object HelloWorld{

   def main(args:Array[String]){

   println("Hello World!!!")

   }

  }

  編譯scalac HelloWorld.scala

  運行 scala HelloWorld

  顯示運行花費的時間 scala –Dscala.time HelloWorld

  除自己實現main方法外,還可以繼承App Trait,然後將需要在main方法中運行的代碼,直接作為object的constructor代碼,而且用args可以接受傳入的參數。

  object HelloWorld extends App{

if(args.length>0) println("hello, " + args(0))

else println("Hello World!!!")

  }

  編譯 scalac HelloWorld.scala

  運行 scala HelloWorld scala HelloWorld LiLei

  App Trait工作原理:App Trait繼承自DelayedInt Trait,Scala命令行進行編譯時,會把繼承App Trait的object的constructor代碼都放到DelayedInt Trait的delayedInit方法中執行。

6、用object實現枚舉功能

  Scala沒有直接提供類似java的Enum這樣的枚舉特性,如果要實現枚舉,則需要用object繼承Enumeration類,並且調用Value方法來初始化枚舉值。

  技術分享圖片

  可以通過value傳入枚舉值得id和name,通過id和toString可以獲取,還可以通過Id和name來查找枚舉值。

  技術分享圖片

8、scala面向對象編程之對象