Рассмотрим это:
class Foo { def foo = "foo" }
trait Bar { self: Foo =>
override def foo = "bar"
}
Я был приятно удивлен, узнав, что это возможно, и работает так, как ожидалось:
new Foo with Bar foo
возвращает "bar". Вопрос в том, можно ли Bar.foo
вызвать Foo.foo
, как это часто бывает в случае "обычного" наследования. override def foo = super.foo + "bar"
не работает (говорит: "foo не является членом AnyRef), и не делает override def foo = self.foo + "bar"
(он заканчивается тем, что просто вызывает себя, и приводит к бесконечной рекурсии).
Я попробовал несколько других комбинаций (например, self.Foo.foo
, Foo.this.foo
и т.д.), Но без везения.
Это просто невозможно?