それはいけません。
ただし、特性を封印済みとしてマークし、デフォルトの実装を提供する場合は、次のようになります。
sealed trait A { val boris: String }
final class B(val boris: String) extends A {}
そうすれば、新しい機能が追加されたように見せかける暗黙の値クラスを自由に作成できます(実際にクラスを作成しない場合を除く)。
implicit class MyB(val underlying: B) extends AnyVal {
def sirob = underlying.boris.reverse
}
(new B("fish")).sirob // "hsif"
コンパイル時に(実行時ではなく)クラスをまっすぐに保ちたい場合は、クラスに型パラメーターをマーカーとして使用させることもできます。
sealed trait A[T] { val boris: String }
final class B[T](val boris: String) extends A[T] {}
implicit class MyB(val underlying: B[Int]) extends AnyVal {
def sirob = underlying.boris.reverse
}
(new B[Int]("fish")).sirob // "hsif"
(new B[Char]("fish")).sirob // error: value sirob is not a member of B[Char]
したがって、特に2.10では、すべてをロックして、ユーザーがこの方法で元のインターフェイスを充実させることができます。
ただし、これが意図したユースケースをカバーしているかどうかはわかりません。継承は提供されません。