大三寒假学习 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 @   风吹过半夏  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2021-01-15 大二寒假作业之Android
点击右上角即可分享
微信分享提示