実装
インターフェース定義
trait Impl {
def hello:String
}
実装トレイト
trait M extends Impl { //インターフェースを継承する
override def hello="i am mama"
}
trait P extends Impl { //インターフェースを継承する
override def hello="i am papa"
}
共通処理
trait C {
def shout(t:String):String={
"%s Gyaaa!!!".format(t)
}
}
利用クラス
class F extends C {
self:Impl => //自分型アノテーションにインターフェースを設定する
def greeting:Unit={
println(shout(hello))
}
}
利用方法
val mama = new F with M //helloの実装をココで注入
mama.greeting
val papa= new F with P //helloの実装をココで注入
papa.greeting
実行結果
i am mama Gyaaa!!!
i am papa Gyaaa!!!