Trait

541732025發表於2015-11-16
在scala中,trait相當於java中的interface關鍵字,可以用來定義介面,但是trait除了定義介面,還有許多強大功能

點選(此處)摺疊或開啟

  1. trait Logger{
  2. // def log (msg : String)
  3.   def log (msg : String){} //與java不同的是,trait允許方法有實現
  4. }

  5. class ConcreteLogger extends Logger with Cloneable{ //with關鍵字可以用來使用其它trait
  6.   override def log(msg : String) = println("Log: " + msg) //子類覆蓋trait方法
  7.   def concreteLog{
  8.     log("It's me !!!")
  9.   }
  10. }

  11. object UseTrait extends App{
  12.     val logger = new ConcreteLogger
        logger.concreteLog
  13. }

結果:Log: It's me !!!

點選(此處)摺疊或開啟

  1. trait Logger{
  2.   def log (msg : String){}
  3. }
  4. class ConcreteLogger extends Logger with Cloneable{ //with關鍵字可以用來使用其它trait
  5.   //這裡沒有覆蓋trait的log方法
  6.   def concreteLog{
  7.     log("It's me !!!")
  8.   }
  9. }

  10. trait TraitLogger extends Logger{ //定義另一個子trait,覆trait的方法
  11.   override def log (msg : String){
  12.     println(" TraitLogger Log content is : " + msg)
  13.   }
  14. }

  15. object UseTrait extends App{
  16.     val logger = new ConcreteLogger whit TraitLogger //將具體實現的trait混入到物件中
  17.     logger.concreteLog
  18. }
結果: TraitLogger Log content is : It's me !!!

所以,一般在trait中做很多不同的工具方法,然後根據執行情況混入不同的trait到物件中

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28912557/viewspace-1839844/,如需轉載,請註明出處,否則將追究法律責任。

相關文章