Почему класс не может расширять черты с помощью метода с той же сигнатурой?

Почему ошибка ниже? Как обойти это?

РЕДАКТИРОВАТЬ: я предположил, что, поскольку A и B компилируются в пары (interface, class), вопрос выбора правильного статического вызова метода для реализации при компиляции C. Я ожидал бы, что приоритет будет в соответствии с порядком.

scala> trait A {def hi = println("A")}
defined trait A

scala> trait B {def hi = println("B")}
defined trait B

scala> class C extends B with A
:6: error: error overriding method hi in trait B of type => Unit;
 method hi in trait A of type => Unit needs `override' modifier
       class C extends B with A

scala> trait A {override def hi = println("A")}
:4: error: method hi overrides nothing
       trait A {override def hi = println("A")}

РЕДАКТИРОВАТЬ: обратите внимание, что в Ruby это работает хорошо:

>> module B; def hi; puts 'B'; end; end
=> nil
>> module A; def hi; puts 'A'; end; end
=> nil
>> class C; include A; include B; end
=> C
>> c = C.new
=> #
>> c.hi
B
=> nil

Ответы на вопрос(5)

Ваш ответ на вопрос