zoukankan      html  css  js  c++  java
  • 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.
  • 相关阅读:
    leetcode刷题16
    leetcode刷题15
    leetcode刷题14
    leetcode刷题13
    UnityWebReqest和WWW,请求web数据打包到Android手机上,报错 Unknown error记录
    Unable to instantiate prefab. Prefab may be broken.(Unity2018.2.2报错)
    Unity 2018.4.0 回退到 2018.2.2 出现错误日志修复
    Windows系统中,使用Protobuf,编译出C#文件
    Unity长按Button,显示消息盒子
    Mac 端 查找UnityEngine.dll和UnityEngine.UI.dll
  • 原文地址:https://www.cnblogs.com/zxbdboke/p/10466312.html
Copyright © 2011-2022 走看看