Scalaの特性はJavaのインターフェースに似ていますが、Javaのインターフェースは他のインターフェースを拡張し、クラスを拡張しません。私は SO特性の使用法の例 の例を見て、特性がクラスを拡張します。
これの目的は何ですか?トレイトがクラスを拡張できるのはなぜですか?
はい、できます。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
^