LoginSignup
0
0

More than 5 years have passed since last update.

Scalaの継承について

Last updated at Posted at 2018-07-07

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!

てっきりTraitBTraitAを継承しているので、Hello, World!と出力されるのかと思ったら、superの向き先はTraitBになっていて、TraitBのメソッドが起動した。

superがどこを向いているか、よく把握しておかないと「意図した挙動じゃない!」ってなりそう。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0