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 = [email protected]
scala> res0.t
res1: Int = 1
我认为,当你写trait T extends A
,这使得它,所以你只能把特质T
上一类是A
一个子类。为什么我可以把它放在B
上呢?这只适用于混合时的情况吗?为什么在宣布课程时这是不可能的?为什么我不能指定特征的子类?
对,但'特质T扩展A'应该只允许你将特性混入到A类中。如果你尝试用'T来新B' - 它不会让你这样做。 – ryeguy 2011-03-22 13:17:21
不,“特质T扩展A”不*应该只允许你将特征混入类A中。它将类A的功能添加到特征T中。因此T具有功能(方法和字段)和A中定义的任何东西。当你说'class B extends T'时,你引入了T *和* A中的所有东西。 – 2011-03-22 19:36:25
@ThomasLockney你应该看看http:// stackoverflow。 com/questions/12854941/why-can-a-scala-trait-extend-a-class 我认为这就是reguy所指的 – hencrice 2015-08-02 22:31:01