• Scala_特质


    特质

    特质概述

    • Java中提供了接口,允许一个类实现任意数量的接口

    • 在Scala中没有接口的概念,而是提供了“特质(trait) ”,它不仅实 现了接口的功能,还具备了很多其他的特性

    • Scala的特质,是代码重用的基本单元,可以同时拥有抽象方法和具体方法

    • Scala中,一个类只能继承自一个超类,却可以实现多个特质,从而重用特质中的方法和字段,实现了多重继承

    特质的定义

    • 特质的定义和类的定义非常相似,有区别的是,特质定义使用关键字trait

    trait CarId {
     var id:Int
     def currentId():Int
    }
    • 上面定义了一个特质,里面包含一个抽象字段id和抽象方法currentId。注 意,抽象方法不需要使用abstract关键字,特质中没有方法体的方法,默 认就是抽象方法

    把特质混入类中

    • 特质定义好以后,就可以使用extends或with关键字把特质混入类中

    class BYDCarId extends CarId {
     override var id: Int = 10000
     override def currentId(): Int = {
       id += 1
       id
    }
    }

    特质可以包含具体实现

    • 上面的实例中,特质只包含了抽象字段和抽象方法,相当于实现了类似Java 接口的功能。实际上,特质也可以包含具体实现,也就是说,特质中的字段 和方法不一定要是抽象的

    trait CarId {
     var id:Int
     def currentId():Int
     def greeting(msg:String): Unit ={
       println(msg)
    }
    }

    把多个特质混入类中

    • 上面已经定义了两个特质CarId和CarGreeting。可以把两个特质都混入到类中

    trait CarId{
     var id:Int
     def currentId():Int
    }
    trait CarGreeting{
     def greeting(msg:String): Unit ={
       println(msg)
    }
    }
    class BYDCarId extends CarId with CarGreeting {
     override var id: Int = 10000
     override def currentId(): Int = {
       id += 1
       id
    }
    }
    object MyCar {
     def main(args: Array[String]): Unit = {
       val mycar = new BYDCarId()
       mycar.greeting("welcome my first car.")
       printf("My first CarId is %d. " , mycar.currentId())
    }
    }
    // 执行结果
    welcome my first car.
    My first CarId is 10001.
  • 相关阅读:
    C面试复习笔记
    Java面试复习笔记
    Jdk1.6 HTTPS访问问题解决办法
    百度地图轨迹回放,自定义路书,边走边画线
    简单的代码生成小工具(支持模板)
    card布局解决复杂操作的布局问题
    tabpanel如何隐藏页签表头以及基本用法总结
    ExtJS4.2下将表单元素放在菜单时不能进行拷贝的问题解决办法
    照片元数据信息以及在照片中写入gps信息
    带名称空间的xml数据查询
  • 原文地址:https://www.cnblogs.com/zxbdboke/p/10466312.html
Copyright © 2020-2023  润新知