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)
        }
    }

      

  • 相关阅读:
    Rust语言学习笔记(11)
    Rust语言学习笔记(10)
    Rust语言学习笔记(9)
    Rust语言学习笔记(8)
    趣味编程:静夜思(Rust版)
    Python sorted()
    Python 魔法方法
    Python filter()
    Python的map和reduce
    Python函数的参数
  • 原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/15807816.html
Copyright © 2011-2022 走看看