Я вижу, что черты в Scala похожи на интерфейсы в Java (но интерфейсы в Java расширяют другие интерфейсы, они не расширяют класс). Я видел пример на SO об использовании признаков, где признак расширяет класс.
какова цель этого? Почему черты могут расширять классы?
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 ^