Scala继承

一、抽象类

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

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

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

二、扩展类

一个类从上面一个类继承下来,使用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()
  }
}

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.

三、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)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值