0014.trait的混入

1.trait的使用
(1)像java中定義接口一樣進行使用,當實現trait的時候,如果實現類沒有繼承其他類,那麼實現類,ConcreateLogger需要extends 一個trait(Logger),如果已經有一個trait或有extends那麼就用with繼承接口Cloneable,在with後面可以有多個接口,中間用逗號進行分割。

(2)混入
(2.1)對trait(Logger)中的方法進行實現在子類trait(TraitLogger)中
 (2.2)實現類ConcreateLogger必須繼承特質Logger
(2.3)ConcreateLogger中的方法調用log方法,實際調用的TraitLogger中的log方法
2.實例
(1)像java中接口一樣進行使用
packagecom.jn.scala.oop

/**
* Created by JN on 2015/10/28.
*/
trait Logger{// 指定關鍵子 trait
def log(msg : String )//
}
class ConcreateLogger extends Logger with Cloneable{ //第一次使用trait,左側沒有trait 那就用extends,如果有就用with
override def log(msg: String ) = println( "log:" + msg)
   
def concreateLog: Unit ={
        log(
"It's me" )
    }
}
object UseTrait {
   
def main(args: Array[String ]) {
       
val log = new ConcreateLogger
        log.concreateLog
    }

}

object UseTrait {
 
def main(args: Array[String ]) {
   
val log = new ConcreateLogger
    log.concreateLog
  }

}
運行結果
log:It's me



package com.jn.scala

/**
* Created by jn on 2015/10/28.
*/
trait Logger{//指定關鍵子trait
//   def log(msg : String)//
def log(msg : String ){}
}
trait TraitLogger extends Logger{//對象混入,類型要一致,進行覆蓋
 
override def log(msg : String ): Unit ={
   
println(
"TraitLogger log content is " + msg)
  }
}

class ConcreateLogger extends Logger with Cloneable{ //第一次使用trait,左側沒有trait那就用extends,如果有就用with
 
override def log(msg: String ) = println( "log:" + msg)
 
def concreateLog: Unit ={
    log(
"It's me" )
  }
}
object UseTrait {
 
def main(args: Array[String ]) {
//    val log = new ConcreateLogger
//    log.concreateLog
       
val log = new ConcreateLogger with TraitLogger //將log實現進行混入
       
log.concreateLog
  }

}
//運行結果
TraitLogger log content is It's me
TraitLogger log content is It's me
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章