Je vois que les traits dans Scala sont similaires aux interfaces dans Java (mais les interfaces dans Java étendent les autres interfaces, ils ne ne pas étendre une classe.) J'ai vu n exemple sur SO sur l'utilisation des traits où un trait étend une classe.
Quel en est le but? Pourquoi les traits peuvent-ils étendre les classes?
Oui, ils le peuvent, un trait
qui étend un class
met une restriction sur ce que classes
peut étendre ce trait
- à savoir, tous les classes
ce mélange dans lequel trait
doit étendre ce 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
^