Statistical Programming

JavaとScalaの違いその9 ... Trait>Interface

ポリモーフィズムに関してJavaとScalaは若干違いがあります。

それはInterfaceがScalaには存在しないということです。

ん、じゃあポリモーフィズムはないの??

→代わりにTraitという、classとinterfaceの中間みたいなやつが存在します。

このtraitをScalaでは代わりに使ってポリモーフィズムを実現していくようです。

traitは実装を持つことの出来るinterfaceと言ってしまえばはやいかと思います。

mix inの書き方は継承と同じでextendsを使い、複数行う場合は extends~ with~ のように書きます。また、interfaceと違ってtraitはややゆるめといいますか既定のメンバ関数やメンバ変数を変更したり追加したりすることも可能です。interfaceよりも便利だと感じますね。traitを扱い時は機能を細かく分けて再利用性を高めるとよいと伺いました…

Try.scala

package inheritance

object DoDo extends App{
    val f=new Factory
    f.gather
    f.make
    f.send
}

class Factory extends Part1 with Part2 with Part3

trait Part1{
  def gather=println("gather components")
}

trait Part2{
  def make=println("make product")
}

trait Part3{
  def send=println("send product")
}

console
gather components
make product
send product