Why can a Scala trait extend a class?

前端 未结 1 1999
时光说笑
时光说笑 2020-12-02 14:21

I see that traits in Scala are similar to interfaces in Java (but interfaces in Java extend other interfaces, they don\'t extend a class). I saw an example on SO about trait

相关标签:
1条回答
  • Yes they can, a trait that extends a class puts a restriction on what classes can extend that trait - namely, all classes that mix-in that trait must extend that 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
                                  ^
    
    0 讨论(0)
提交回复
热议问题