admin管理员组

文章数量:1794759

scala

scala

特质

    • 一、特质(trait)
    • 二、混入特质(mixin)
    • 三、特质与抽象类的选择

一、特质(trait)

  • Scala中没有接口(interface)的概念

  • 特质用于在类之间共享程序接口和字段,类似Java接口

  • 特质是字段和方法的集合,可以提供字段和方法实现

  • 类和单例对象都可以扩展特质(extends)

  • 特质不能被实例化,因此没有构造参数,类似Java接口

  • 特质使用“trait”关键字定义

  • 实现特质中的方法使用“override”

二、混入特质(mixin)

  • 当某个特质被用于组合类时,被称为混入

  • 一个类只能有一个父类但是可以有多个混入(分别使用关键字extends和with)

trait Type1{def wheele:String= "四轮驱动"def run():Unit
}trait Type2{def fly()= println("可以飞")def down()= println("下海")
}//定义抽象类
abstract class Car {def brand:Stringdef engine:Stringdef didi():String ={"汽车鸣笛"}
}//实现类 混入特质
class BMW extends Car with Type1 {override def brand: String = {"德系宝马"}override def engine: String = {"6.0自然吸气,燃油动力"}override def run(): Unit = {println("在路上跑")}
}class LingYun extends Car {override def brand: String = "凌云汽车"override def engine: String = "纯电动汽车"
}object test{def main(args: Array[String]): Unit = {val bmw=new BMWprintln(bmw.brand)println(bmw.engine)println(bmw.didi())println(bmw.wheele)bmw.run()//动态混入特质val lingYun:LingYun=new LingYun with Type1 with Type2{override def run(): Unit = {println("两轮电动汽车")}}println(lingYun.brand)println(lingYun.engine)lingYun.run()lingYun.fly()lingYun.down()}
}

三、特质与抽象类的选择

  • 优先使用特质
    1.抽象类只能继承一次
    2.特质可混入多个

  • 需要使用带参构造方法时,使用抽象类

  • 与Java互操作性
    1.抽象类与Java完全可互操作
    2.特质只有在不包含任何实现代码时才可互操作

本文标签: Scala