2016-10-05 50 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

至少现在社区内已经讨论过这些功能,并且已经有了很好的举措来确保正确讨论添加内容。

相关问题