天天看点

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{} //继承类 一定是先继承在写特质