2018/7/7 20:55 追記
最後のObjectの継承順を間違えていたので、修正しました。何度か挙動を確認するために書き換えていたものをそのまま投稿していたようです。すみません
ご指摘ありがとうございます>xuwei_k
今までちゃんと意識していなかっただけど…
scala> trait TraitA {
| def greet(): String = "Hello, World!"
| }
defined trait TraitA
scala> trait TraitB extends TraitA {
| override def greet(): String = "Hello, Japan!"
| }
defined trait TraitB
scala> trait TraitC extends TraitA {
| override def greet(): String = super.greet
| }
defined trait TraitC
scala> object ObjectA extends TraitB with TraitC
defined object ObjectA
scala> ObjectA.greet
res0: String = Hello, Japan!
てっきりTraitB
はTraitA
を継承しているので、Hello, World!
と出力されるのかと思ったら、super
の向き先はTraitB
になっていて、TraitB
のメソッドが起動した。
super
がどこを向いているか、よく把握しておかないと「意図した挙動じゃない!」ってなりそう。