Scala のトレイトは Java のインターフェースに似ていることがわかります (ただし、Java のインターフェースは他のインターフェースを拡張するものであり、クラスを拡張するものではありません)。特性がクラスを拡張する特性の使用法に関するSOの例を見ました。
これの目的は何ですか?特性がクラスを拡張できるのはなぜですか?
Scala のトレイトは Java のインターフェースに似ていることがわかります (ただし、Java のインターフェースは他のインターフェースを拡張するものであり、クラスを拡張するものではありません)。特性がクラスを拡張する特性の使用法に関するSOの例を見ました。
これの目的は何ですか?特性がクラスを拡張できるのはなぜですか?
はい、できます。atrait
を拡張する aは、それを拡張できるもの、つまり、それを拡張する必要があるすべてのミックスインに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
^