Даны две независимые черты:Составление независимых признаков
trait T1 {
def x = 42
}
trait T2 {
def x = 0
}
Если я пытаюсь определить смешивание класса в этих двух черт, как:
class C extends T1 with T2
Я получаю ошибку компиляции:
error: overriding method x in trait T1 of type => Int;
method x in trait T2 of type => Int needs `override' modifier
class C extends T1 with T2
^
one error found
Теперь предположим, что T1 и T2 были разработаны независимо, поэтому не переопределяют, поскольку они не переопределяют ничего. Как можно определить C? Пример:
class C extends T1 with T2 {
override def x = super.x
}
?
Это интересно. Если два определения 'x' в' T1' и 'T2' имеют разные типы, это кажется неизбежной проблемой. Есть ли умный способ в Scala исправить эти конфликты имен, если типы не совпадают? – Mike
Используйте мой первый пример, а затем определите 'C' следующим образом:' class C расширяет T1 с T2 {переопределить def x = super [T1] .x} '. Конечно, вы также можете назвать 'super [T2] .x'. –