1.Scala 特质
从面向对象来看,接口并不属于面向对象的范畴,而Scala是纯面向对象的语言,所以在Scala中没有接口。Scala语言中,采用特质trait(特征)来代替接口的概念,也就是说,多个类具有相同的特征时,就可以将这个特质独立出来,采用关键字trait声明。 理解trait 等价于(interface + abstract class)
1.1 trait 的声明语法
trait 特质名 {
trait体
}
在 Scala 的 trait 中,它不但可以包括抽象方法、字段还可以包含普通字段和具体方法。在Scala中实现特质,如果没有继承其它类,那么实现第一个特质使用 extends 关键字,后面的使用 with 关键字,Scala中的特质可以多实现扩展,多个特质之间使用 with 关键字进行连接,所以如果你将Scala中的特质看做是一个抽象类或一个普通的类的话,那么相当于Scala间接实现了类的多继承,而如果将特质看成一个接口,那么它跟Java中的接口一样,多个特质之间可以多继承。
Scala的继承是单继承,也就是一个类最多只能有一个直接父类,这种单继承的机制可保证类的纯洁性,比c++中的多继承机制简洁。但对子类功能的扩展有一定影响,所以我们认为,Scala引入trait特质,既可以替代Java的接口, 也是对单继承机制的一种补充。
1.2 特质 trait 动态混入
除了可以在类声明时继承特质以外,还可以在构建对象时混入特质,扩展目标类的功能。动态混入是Scala特有的方式(java没有动态混入),可在不修改类声明/定义的情况下,即动态混入可以在不影响原有的继承关系的基础上,给指定的类扩展功能,非常的灵活,耦合性低 。
1.3 叠加特质trait