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?