web-dev-qa-db-fra.com

Pourquoi un trait Scala peut-il étendre une classe?

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?

54
Raj

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
                              ^
69
adelbertc