scala中的接口
沒有接口,採用trait(特徵)來代替接口的概念,類似於java中的 interface+abstract class, scala中稱爲類 混入/繼承 了特質
特質 trait
– 可以類比java中的接口,但是又和接口非常不一樣
定義特質
trait xxx{
def m1()
def m2(){....}
}
和java中的接口不同 scala中的特質可以包含具有方法體的方法(java8也可以在接口中定義具有方法體的方法)
和抽象類不同的地方在於 scala的類只能單繼承 但是可以多混入 利用這種方式可以實現類似c語言中多繼承的特性
特質的兩種使用方式
混入特質 with,被實現的方式不具有傳遞性
繼承特質 extends,使方法具有了傳遞性
如果類沒有明確繼承父類,即extends關鍵字沒有被佔用 就可以使用extends 但是如已經使用了extends繼承了父類 再向混入特質就要用 with關鍵字了 一個類的聲明中只能有一個 extends 但是可以有多個with
繼承和特質的區別不在於技術上而在於邏輯上
繼承的目的——爲了符合繼承結構樹,表明它是啥;
實現特質的目的——爲了混入某些特性
trait Run{
def run()
def run(length:Long){
}
}
trait Eat{
def eat()
}
trait Sleep{
def sleep()
}
class Demo10 extends Run with Eat with Sleep {
def run(): Unit = {
}
def eat(): Unit = {
}
def sleep(): Unit = {
}
}