本文主要是介绍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--特质的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!