Черта добавляет методы к классу, который смешивает его. Если две черты добавляют один и тот же метод, класс получит два идентичных метода, чего, конечно, не может быть.
Однако, если метод является частным в признаке, это не вызовет проблем. И если вы хотите, чтобы методы накладывались друг на друга, вы можете определить базовую черту, а затем abstract override
для наследующих черт. Однако для определения метода требуется класс. Вот пример этого:
scala> trait Hi { def hi: Unit }
defined trait Hi
scala> trait A extends Hi { abstract override def hi = { println("A"); super.hi } }
defined trait A
scala> trait B extends Hi { abstract override def hi = { println("B"); super.hi } }
defined trait B
scala> class NoHi extends Hi { def hi = () }
defined class NoHi
scala> class C extends NoHi with B with A
defined class C
scala> new C().hi
A
B
Однако, если вы действительно хотите два отдельных метода для каждой черты, тогда вам нужно написать вместо наследовать .