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