2016-10-05 56 views
0

我讀了很多關於特質的文章,但我確定我錯過了這裏的一些東西。我明白它們對抽象類有不同之處,但它們與抽象類的差別似乎對我來說很小。爲什麼不把特徵和抽象類組合起來只是Scala中的一個概念 - 一種具有多繼承性的抽象類(有點像C++,我猜 - 但我從來沒有學過C++)。奧德斯基不這麼做的原因是什麼?爲什麼Scala特徵和抽象類不統一?

+1

請參閱[這個答案](http://stackoverflow.com/a/15330312/1870803)這可能會回答你的一些傳遞思想。 –

+0

抽象類適用於Java,特性不... – Nimrod007

+0

對於它的價值,([Dotty](https://github.com/lampepfl/dotty)),下一代Scala將它們統一起來。參見[SIP 25](http://docs.scala-lang.org/sips/pending/trait-parameters.html)。 –

回答

0

我想一個很大的區別是,抽象類只能一次擴展一個特徵,而你可以將它們組合起來。有幾種基於特徵的模式用於組成功能,初始化或注入。

大特性中缺少的東西,就是接收參數的能力,你可以用抽象類做到這一點。但是這種差異會在下一個版本中消失,因爲每個dotty文檔都可以使用特質來處理所有事情。

+0

謝謝,但這不是回答我的問題,還是我錯過了? – Make42

+0

夠公平的,我不能說Odersky的原因。但我的猜測是,最初是Java兼容性。畢竟,Scala試圖儘可能地與Java兼容,所以他們並沒有刪除抽象類,而是想添加類似特徵的東西。我試圖說的是,至少現在有將它們統一起來的意願。儘管我喜歡Scala,但我需要接受它試圖添加儘可能多的功能,並且有時候會發生這種情況,因爲沒有真正思考,在前面,如何去做。 – FerranJr

-1

至少現在社區內已經討論過這些功能,並且已經有了很好的舉措來確保正確討論添加內容。

相關問題