Кажется, вы пытаетесь использовать виртуальные классы, а эта функция недоступна в Scala.
Как только A и B определены, они не могут быть переопределены (как переопределение метода).
abstract class A
class B extends A
С другой стороны, учитывая ваш пример, ваша цель может быть достигнута простым миксином. Вот это с несколькими переписывает:
class Base {
abstract class A
class B extends A
case class C extends A
}
trait Ext extends Base {
trait CanSay extends A {
def say = "hello"
}
}
object Test extends Base with Ext {
val b = new B with CanSay
def apply = b.say
}
Test.apply
Не уверен, что это действительно поможет, но по крайней мере поможет вам понять, что происходит.