zoukankan      html  css  js  c++  java
  • 大三寒假学习 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)
        }
    }

      

  • 相关阅读:
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    linux中的cd ..和cd -命令有什么区别?
    GCC使用
  • 原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/15807816.html
Copyright © 2011-2022 走看看