1. 程式人生 > >Scala學習第十四天 Scala中作為介面的trait、在物件中混入trait程式碼實戰

Scala學習第十四天 Scala中作為介面的trait、在物件中混入trait程式碼實戰

1、java中有interface介面,scala裡有同樣功能的關鍵字trait,trait的功能比interface功能強大很多。
2、trait和Java中的有所不同 interface中只能定義abstarct public方法 而trait中可以定義具體實現方法


class UserTrait {  

}  

trait Logger{  
    def log(msg: String)  //在trait中定義抽象方法  
    def logImpl(msg: String){} //在trait中定義具體方法  
}  
/**  
 * 類可以繼承多個trait 語法為:extend trait with trait1  
 */
class ConcreteLogger extends Logger with Cloneable{ override def log(msg: String) = println("Log:"+msg) //複寫Logger trait中log抽象方法 def concreteLogger{ log("It's me") } } /** * 在使用物件混入trait使用的前提是 * 該TraitLogger要繼承複寫方法的那個trait */ trait TraitLogger extends Logger
{
override def log(msg: String){ println("TraitLogger log content is :" + msg) } } trait TraitLoggered{ def logged(msg: String){ println("TraitLoggered log content is :" + msg) } } /** * Scala中作為介面的trait、在物件中混入trait */ object InterfaceOps
{
def main(args: Array[String]): Unit = { val concreteLogger = new ConcreteLogger concreteLogger.concreteLogger //row result : Log:It's me val concreteLogger1 = new ConcreteLogger with TraitLogger //在例項化時混入trait 則會呼叫TraitLogger中的log concreteLogger1.concreteLogger //row result : TraitLogger log content is :It's me } }

scala和java一樣只能繼承一個類或抽象類,但可以實現多個介面,scala可以在物件中混入多個trait程式碼,把各種各樣工具方法混入類和物件中,這給我們構造大型工廠和複雜一些的上下文環境十分重要。