• Scala继承


    一、抽象类

    如果一个类中包含没有被实现的成员,那么称这个类为抽象类。

    • 抽象类必须使用abstract修饰
    • 不需要使用关键字abstract定义抽象类的抽象方法
    • 抽象类中定义的字段没有初值就是抽象字段
    abstract class Car3(val name: String) {
      val carBrand: String //字段没有初始化值,就是一个抽象字段
      def info() //抽象方法
      def greeting(): Unit = {
        println("Welcome to my car !")
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    抽象字段必须给出类型声明,否则编译不通过会报错。

    二、扩展类

    一个类从上面一个类继承下来,使用extends表示继承关系。

    • 重载父类的抽象成员时,ovemride关键字是可选的
    • 重载父类的非抽象成员时,ovemride关键字是必须的
    • 只能重载val类型字段,不能重载var字段
    abstract class Car4 {
      val carBrand: String
      def info()
      def greeting() {println("Welcome to my car !")}
    }
    
    class BMWCar extends Car4 {
      override val carBrand = "BMW"
      def info() {printf("This is a %s car. It is expensive.\n", carBrand)}
      override def greeting() {println("Welcome to my BMW car!")}
    }
    
    class BYDCar extends Car4 {
      override val carBrand = "BYD"
      def info() {printf("This is a %s car. It is cheap.\n", carBrand)}
      override def greeting() {println("Welcome to my BYD car!")}
    }
    
    object MyCar{
      def main(args: Array[String]): Unit = {
        val myCar1=new BMWCar()
        val myCar2=new BYDCar()
        myCar1.greeting()
        myCar1.info()
        myCar2.greeting()
        myCar2.info()
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    out:

    Welcome to my BMW car!
    This is a BMW car. It is expensive.
    Welcome to my BYD car!
    This is a BYD car. It is cheap.
    
    • 1
    • 2
    • 3
    • 4

    三、Scala的类层次结构

    在这里插入图片描述

    Scala类的顶层是一个叫Any的抽象类,所有的类都是从这里继承下来的。从Any类又派生出这些子类,一个是AnyVal另外一个是AnyRef

    AnyVal:

    所有的数据类型Char、Byte、Short、Int、Long都是继承自AnyVal,不可实例化,这些叫做值类型,它的值最终都是被放在寄存器当中去的。

    AnyRef:

    所有的Scala的引用类型都是继承自AnyRef这个子类的,可以实例化,它的对象被实例化之后都是被保存在当中去的。
    这个对象生成之后实际上是生成了一个指针指向了堆当中的一个地址;所有引用类型的对象都是存在堆当中的。

    Null是所有引用类型的子类型。

    Nothing是所有类的子类,没有实例,用做错误处理和异常处理。

    四、Option类

    Option类是一个抽象类。

    Option有个子类叫Some子类。只要返回值是Option类的,这些返回值最终返回的结果都会被封装成Some对象返回来。

    Option里面还有一个对象叫None对象,None对象就是返回的东西是空,当返回东西为空时它会返回一个None,如果有东西就会封装到Some对象里面作为Some返回来。

    scala> case class Book(val name:String,val price:Double)
    defined class Book
    
    scala> val books=Map("hadoop"->Book("Hadoop",35.5),"spark"->Book("Spark",55.5),"hbase"->B
    ook("Hbase",26.0))//定义一个书名到书对象的映射
    books: scala.collection.immutable.Map[String,Book] = Map(hadoop -> Book(Hadoop,35.5), spa
    rk -> Book(Spark,55.5), hbase -> Book(Hbase,26.0))
    
    scala> books.get("hadoop")//返回该键所对应值的Some对象
    res0: Option[Book] = Some(Book(Hadoop,35.5))
    
    scala> books.get("hive")//不存在该键,返回None对象
    res1: Option[Book] = None
    
    scala> books.get("hadoop").get//Some对象的get方法返回其包装的对象
    res2: Book = Book(Hadoop,35.5)
    
    scala> books.get("hive").get//None对象的get方法会抛出异常
    java.util.NoSuchElementException: None.get
      at scala.None$.get(Option.scala:529)
      at scala.None$.get(Option.scala:527)
      ... 28 elided
    
    scala> books.get("hive").getOrElse(Book("Unknown name",0))
    res4: Book = Book(Unknown name,0.0)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
  • 相关阅读:
    Python股票市场的风险管理
    Linux简单命令之用户组操作
    浅析PHP中的闭包和匿名函数
    【Ubuntu】修改ubuntu和windows双系统启动顺序
    安卓机型系统美化 Color.xml文件必备常识 自定义颜色资源
    数据结构-选择排序Java实现
    企业架构LNMP学习笔记39
    [MICROSAR Adaptive] --- Hello Adaptive World
    Java进阶之博客大牛优秀好文之文章友情链接与好书推荐
    创新与重塑,佛塑科技打造集团型 CRM 建设标杆
  • 原文地址:https://blog.csdn.net/XQC_KKK/article/details/127598449