Scala特性与Java 8接口之间有什么区别和相似之处?

我是新来的斯卡拉开始学习语言的乐趣,我仍然试图让我的头。 我对Scala特性的理解是它们就像java接口,除了一些方法可以有一个实现。

Java 8添加了可以提供实现的默认方法的接口。

Java 8接口和Scala特性有什么相似之处和不同点?

Java 8默认方法Scala特性的动机不同。

前者被引入来支持安全的API进化和多重inheritance的有限forms。 利用Project Lambda中的函数式编程习惯用法,例如,在不改变所有可能的实现者(在不破坏向后兼容性的情况下实际上不可能做到这一点forEach(lambda)情况下,将forEach(lambda)方法添加到java.util.Collection接口是有益的。 作为一个副作用,这也提供了mixin组成的一种forms。

Scala特性是从零开始devise的,作为模块化组件构build的基础。 它们是多重inheritance友好的,没有钻石问题 ,因为线性化对混合的评估顺序有严格的规定。 他们也支持国家,可以参考实施class级,并对哪些types可以混入其中进行限制。 看看斯卡拉收集图书馆的特点是彻底使用。

请注意,使用scala 2.12.0 RC1(2016年9月) , Trait现在编译为一个接口。
Scala 2.12是关于最佳使用Java 8的新function的

在Java 8中允许在接口中使用具体的方法,Scala 2.12能够将特征编译到单个接口。

之前,一个特质被表示为一个拥有方法实现和接口的类
请注意,编译器在幕后执行仍然有相当的魔力,所以如果要用Java实现特征,必须小心。
(简而言之,如果一个特征执行以下任何一项,它的子类将需要合成代码:定义字段,在主体中调用超级初始化语句,扩展一个类,依靠线性化在正确的超级特征中查找实现。

请参阅scala 5003更多的实现差异。