Я вижу, что черты в Scala похожи на интерфейсы в Java (но интерфейсы в Java расширяют другие интерфейсы, они не расширяют класс). Я видел пример на SO об использовании признаков, где признак расширяет класс.

какова цель этого? Почему черты могут расширять классы?

1 51

1 ответ:

Да они могут, а trait расширение class ставит ограничений на то, что classes что нужно trait, а именно - все classes эта смесь-в этом trait должен расширить это 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@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
                              ^