天天看點

scala_特質(Trait)

特質(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{} //繼承類 一定是先繼承在寫特質