Ответ очень старый, поэтому, возможно, scala изменил это поведение, но для меня сейчас это выглядит так, как будто это неправильно. Линеаризация должна быть: Реализация, Абстракция, Черта, ...
е работает:
trait Trait
class Class extends Trait with Trait
Компилятор жалуется:
<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
^
Это делает:
trait Trait
class Abstraction extends Trait
class Implementation extends Abstraction with Trait
Вопросов:
Почему это работает?Чем отличается второй фрагмент? (относительно вопроса двойного наследования)Второй фрагмент или шаблон как-то полезен?