1 Scala接口的介绍
从面向对象来看,接口并不属于面向对象的范畴,Scala是纯面向对象的语言,在Scala中,没有接口。
Scala语言中,采用特质trait(特征)来代替接口的概念,也就是说,多个类具有相同的特征(特征)时,就可以将这个特质(特征)独立出来,采用关键字trait声明。 理解trait 等价于(interface + abstract class)
2 特质(trait)
trait 的声明
trait 特质名 {
trait体
}
trait 命名 一般首字母大写.
Cloneable , Serializable
object T1 extends Serializable {
}
Serializable: 就是scala的一个特质。
在scala中,java中的接口可以当做特质使用
3 Scala中trait 的使用
一个类具有某种特质(特征),就意味着这个类满足了这个特质(特征)的所有要素,所以在使用时,也采用了extends关键字,如果有多个特质或存在父类,那么需要采用with关键字连接
没有父类
class 类名 extends 特质1 with 特质2 with 特质3 ..
有父类
class 类名 extends 父类 with 特质1 with 特质2 with 特质3
4 特质的快速入门案例
可以把特质可以看作是对继承的一种补充
Scala的继承是单继承,也就是一个类最多只能有一个父类,这种单继承的机制可保证类 的纯洁性,比c++中的多继承机制简洁。
但对子类功能的扩展有一定影响.所以 我们认为: Scala引入trait特征 第一可以替代Java的接口, 第二个也是对单继承机制 的一种补充
trait trait1 { //声明方法,抽象的.
def getConnect(user: String, pwd: String): Unit //def test(n1:Int)
} class A {} class B extends A {} class C extends A with trait1 {
override def getConnect(user: String, pwd: String): Unit = {
println("c连接mysql")
}} class D {} class E extends D with trait1 {
def getConnect(user: String, pwd: String): Unit = {
println("e连接oracle")
}} class F extends D {}
5 特质trait 的再说明
1)Scala提供了特质(trait),特质可以同时拥有抽象方法和具体方法,一个类可以实现/继承多个特质。
2)特质中没有实现的方法就是抽象方法。类通过extends继承特质,通过with可以继承多个特质
3)所有的java接口都可以当做Scala特质使用