web-dev-qa-db-ja.com

Scalaトレイトがクラスを拡張できるのはなぜですか?

Scalaの特性はJavaのインターフェースに似ていますが、Javaのインターフェースは他のインターフェースを拡張し、クラスを拡張しません。私は SO特性の使用法の例 の例を見て、特性がクラスを拡張します。

これの目的は何ですか?トレイトがクラスを拡張できるのはなぜですか?

54
Raj

はい、できます。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$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