when mixin functions for define classes basics scala traits

mixin - ¿Por qué un rasgo de Scala puede extender una clase?



scala for (1)

Sí, pueden, un trait que extiende una class pone una restricción sobre qué classes pueden extender ese trait , es decir, todas las classes que se mezclan, en ese trait debe extender esa class .

scala> class Foo defined class Foo scala> trait FooTrait extends Foo defined trait FooTrait scala> val good = new Foo with FooTrait good: Foo with FooTrait = $anon$1@773d3f62 scala> class Bar defined class Bar scala> val bad = new Bar with FooTrait <console>:10: error: illegal inheritance; superclass Bar is not a subclass of the superclass Foo of the mixin trait FooTrait val bad = new Bar with FooTrait ^

Veo que los rasgos en Scala son similares a las interfaces en Java (pero las interfaces en Java extienden otras interfaces, no extienden una clase). Vi un ejemplo en SO sobre el uso de rasgos donde un rasgo extiende una clase.

¿Cuál es el propósito de esto? ¿Por qué los rasgos pueden extender las clases?