This doesn't work:
trait Trait
class Class extends Trait with Trait
Compiler complains:
<console>:8: error: trait Trait is inherited twice
class Class extends Trait with Trait
^
<console>:8: error: trait Trait is inherited twice
class Class extends Trait with Trait
^
This does:
trait Trait
class Abstraction extends Trait
class Implementation extends Abstraction with Trait
Questions:
Second snippet works because of trait linearization. The compiler will organize the traits into a linear list so that Trait
only appears once. I think the linearization is
Implementation, Trait, Abstraction, ScalaObject, AnyRef, Any
See this chapter from Programming Scala for a great explanation.
This is primarily done to have a consistent approach to the diamond inheritance problem and is useful in that case.
Since Trait
cannot appear twice after linearization, it does not make sense to write Trait with Trait
and it makes sense to be disallowed.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With