特質(Trait)
定義
- 特質是Scala中特有一種形式;
- 特質(Trait)用于類于類之間共享方法和屬性,Scala特質相當于是Java8中的接口
-
在Scala特質中即可以定義屬性,也可以定義抽象方法而且還可以定義已經實作的方法
ps:Scala中一切皆繼承,Scala會将所有的資料類型都看做類,是以隻有一個關鍵字 extends
沒有 implements 實作
文法
- 1.在沒有父類的前提下,繼承一個特質
- 2.有父類繼承,并且還有繼承一個特質
class 類名 extends 父類 with 特質
- 3.一個類一次繼承多個特質
ps: Scala中類是單一繼承,一個類隻能一個直接父類
因為Scala中隻有extends關鍵,是以不能看做是多繼承
相當于是Java中類實作多個接口,要這樣了解
extends -->被翻譯成繼承之外,這個詞應該是 “擴充” 意思
特質Trait使用
trait Flyable {
//定義屬性
val speed:Int=1000
val heightL:Int
//定義實作方法
def fly:String={
"I can fly"
}
//定義抽象方法
def fight:String
}
繼承特質
class Bird extends Flyable{
override val heightL: Int = 100
override def fight: String ="huifei"
//在子類繼承父類或特質的情況下建議使用 override進行方法和屬性重寫
override def fly: String = super.fly
}
特質的特殊繼承
class Animal{}
trait Flyable2 extends Animal{} // 特質是可以繼承類的,特質會擷取到類中屬性和方法(可見的)
class Cat extends Flyable2{} //目前Cat就會有Flyable2和Animal中所有屬性和方法(可見的)
class Dog extends Flyable with Flyable2{} //一個類繼承多個特質,這裡相當于是實作特質,不
是多繼承
class QQ extends Animal with Flyable2{} //繼承類 一定是先繼承在寫特質