Нет способа расширить усовершенствованный тип в Scala (я не уверен, что это можно было бы безопасно выполнить, но было бы интересно исследовать).
У меня есть более подробное решение, которое приближает вас к цели.
trait HasStuff {
def theirStuff: String
}
trait ImplementsStuff extends HasStuff {
def stuff = "trait + " + theirStuff
}
Обратите внимание, что вместо улучшенного типа у меня есть черта, и расширите ее в реализации. Мне нужно добавить супер-аксессоры вручную, я делаю это путем делегирования. HasStuff
определяет их, и я реализую их на сайте mixin:
val a = new A with ImplementsStuff {
def theirStuff = super[A].stuff
override def stuff = super[ImplementsStuff].stuff
}
val b = new B with ImplementsStuff {
def theirStuff = super[B].stuff
override def stuff = super[ImplementsStuff].stuff
}
На сайте mixin мне нужно реализовать супер-аксессор (theirStuff
) для перенаправления на правильный унаследованный метод. Мне также нужно переопределить stuff
на этом уровне, поскольку ImplementsStuff
не наследует метод stuff
, поэтому он не может override
его.
Вызов stuff
на a
и b
показывает, что он был переопределен:
$ a.stuff
res0: java.lang.String = trait + a stuff
$ b.stuff
res1: java.lang.String = trait + b stuff