2014-09-21 51 views

回答

10

我很難構建我的答案在一個不錯的方式,但這裏仍然是解釋的嘗試是怎麼回事:

你得到一個編譯錯誤,因爲extends條款要求類和特質,不是類型,你'給一個類型。類和特徵不能與類型混淆。

當然有更好的解釋。但基本上,一個類型指定了可以應用於某些事物(有時是其他屬性)的操作。類和特徵定義其實例的行爲。

在大多數靜態類型的OO語言中,每個類/接口/特性也有一個關聯的類型。然而,相互關係通常不是真實的:並非所有類型都具有相應的類/界面/特徵。例如,您的C with T是一種類型,但不是類,也不是特性(甚至不是它們的組合)。

extends子句期望類和特徵(由with分隔),但不是一種類型。這是因爲extends的意思是:延伸行爲這個東西。正如我所說的,類型不定義行爲。

在大多數地方,語法A with B表示類型這既是類型A和類型B的子類型。然而,在extends子句中,with具有不同的含義,並且僅作爲extends參數的分隔符(很像,充當方法調用參數的分隔符)。

如果你寫class X extends C with T,它會工作,因爲它意味着class X extends C, T,如果你想。

HTH

+2

「由於擴展​​子句需要類和特性,因此不需要類型」,您可以刪除其餘部分:) – samthebest 2014-09-21 17:33:55

1

字符串是最後一個類,不能擴展。

+1

雖然這是正確的,問題是不支持這種類型的擴展名,即使不是字符串你使用一些自定義的類,它仍然不會編譯。 – 2014-09-21 14:21:26

+0

對,我將其更改爲自定義類,編譯錯誤相同 – Freewind 2014-09-21 14:25:37

相關問題