大三寒假学习 spark学习 Scala面向对编程 特质

特质概述:

  • Java中提供了接口,允许一个类实现任意数量的接口。
  •  Scala中没有接口的概念,而是提供了“特质(trait)”,它不仅实现了接口的功能,还具备了很多其他的特性
  •  Scala的特质是代码重用的基本单元,可以同时拥有抽象方法和具体方法
  •  Scala中,一个类只能继承自一个超类,却可以实现多个特质,从而重用特质中的方法和字段,实现了多重继承

特质的定义:

  使用关键字trait。

  

  • 特质既可以包含抽象成员,也可以包含非抽象成员。包含抽象成员时,也不需要abstract关键字。
  • 特质可以使用extends继承其它的特质,并且还可以继承类。
  • 特质的定义体就相当于主构造器,与类不同的是,不能给特质的主构造器提供参数列表,而且也不能为特质定义辅助构造器。

代码示例:

trait CarId{
    var id: Int
    def currentId(): Int
    //定义了一个抽象方法
}
class BYDCarId extends CarId{//使用extends关键字
    override var id = 10000 //BYD汽车编号从10000开始
    def currentId(): Int = {id +=1; id}//返回汽车编号
}
class BMWCarId extends CarId{//使用extends关键字
    override var id = 20000 //BMW汽车编号从20000开始
    def currentId(): Int = {id +=1; id}//返回汽车编号
}
object MyCar {
    def main(args: Array[String]){
        val myCarId1 = new BYDCarId()
        val myCarId2 =new BMwCarId()
        printf("My first CarId is %d. \n" ,myCarId1.currentId)
        printf("My second CarId is %d.\n",myCarId2.currentId)
    }
}

 

将多个特质混入到类中:

  

trait carid{
    var id: Int
    def currentId(): Int//定义了一个抽象方法
}
trait carGreeting{
    def greeting(msg: String) {
        println(msg)
    }
}
class BYDCarId extends CarId with carGreeting{ //使用extends关键字混入第1个特质,后面可以反复使用with关键字混入更多特质
    override var id = 10000 //BYD汽车编号从10000开始
    def currentId():Int = {id +=1; id}//返回汽车编号
}
class BMWCarId extends CarId with carGreeting{ //使用extends关键字混入第1个特质,后面可以反复使用with关键字混入更多待质
    override var id = 20000 //BNW汽车编号从20000开始
    def currentId(): Int = {id +=1 ; id}//返回汽车编号
}
object MyCar {
    def main( args:Array[String]){
        val mycarid1 = new BYDCarId()
        val mycarid2 = new BMWCarid()
        mycarid1.greeting( "welcome my first car.")
        printf("Hy first carId is %d.\n" ,mycarId1.currentId)
        mycarId2.greeting("we1come my second car.")
        printf("My second CarId is %d.ln" ,mycarId2.currentId)
    }
}

  

posted @ 2022-01-15 19:17  风吹过半夏  阅读(32)  评论(0编辑  收藏  举报