scala> class A defined class A scala> trait T extends A { val t = 1 } defined trait T //why can I do this? scala> class B extends T defined class B scala> new B res0: B = B@2e9c76 scala> res0.t res1: Int = 1 I thought that when you write trait T extends A, it makes it so you can only put trait T on a class that is a subclass of A. Why can I put it on B, then? Is this only for when you mix it in? Why is this not possible when declaring the class?