Scala学習14日目Scalaでインタフェースとしてのtrait,対象にtraitコードを混入して実戦


1、javaにはinterfaceインタフェースがあり、scalaには同じ機能のキーワードtraitがあり、traitの機能はinterfaceの機能よりずっと強い.2、traitとJavaの異なるインターネットでは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と同様に1つのクラスまたは抽象クラスしか継承できないが、複数のインタフェースを実現することができ、scalaはオブジェクトに複数のtraitコードを混入することができ、様々なツール方法をクラスとオブジェクトに混入することができ、これは私たちに大規模な工場と複雑なコンテキスト環境を構築するのに非常に重要である.