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