Scala入门系列之七--scala中的继承

传送门
Scala入门系列之一--使用命令行往文件输入数据并读取数据
Scala入门系列之二--数组、元组、列表、集合数据类型简述
Scala入门系列之三--类和方法的创建以及命令行执行scala文件
Scala入门系列之四--类成员的可见性(private)以及用value和value_=进行读取和修改
Scala入门系列之五--主构造器和辅助构造器
Scala入门系列之六--伴生对象和伴生类
Scala入门系列之七--scala中的继承
Scala入门系列之八--scala中的特质(trait),也称接口
Scala入门系列之九--模式匹配两大法宝(match语句和case类)
Scala入门系列之十--包
Scala入门系列之十一--函数式编程基础
Scala入门系列之十二--高阶函数
Scala入门系列之十三--针对容器的操作(遍历/映射/过滤/规约操作)
Scala入门系列之十四--使用IDEA编写Scala代码并Maven打包提交集群运行
传送门

一、继承

1)抽象类

  • 如果一个类包含没有实现的成员,则必须使用abstract关键词进行修饰,叫作抽象类
abstract class Car(val name:String){
  val carBrand:String  //字段没有初始化值,就是一个抽象字段
  def info()  //抽象方法
  def greeting(){
      println("Welcome to my car!")
  }
}


//关于上面的定义,说明几点:
//(1)定义一个抽象类,需要使用关键字abstract
//(2)定义一个抽象方法,不需要关键字abstract,只要把方法体空着,不写方法体就行
//(3)抽象类中定义的字段,只要没给初始化值,就表示是一个抽象字段,但是,抽象字段必须要声明类型,否则编译会报错

2)扩展类

Scala只支持单一继承,而不支持多重继承。在类定义中使用extends关键字表示继承关系。定义子类时,需要注意:

  • 重载父类的抽象成员(包括字段和方法)时,override关键字是可选的;而重载父类的非抽象成员时,override关键字是必选的
  • 只能重载val类型的字段,而不能重载var类型的字段。因为var本身就是可变的,可直接修改,无需重载。
abstract class Car{
    val carBound:String
    def info()
    def greeting(){println("Welcome to my car!")}    
}
class BMWCar extends Car{
    override val carBrand = "BWM"
    def info(){println("This is a "+ carBrand + "car!")}
    override def greeting(){println("Welcome to my car!")}
}

object MyCar {
    def main(args:Array[String]){
        val myCar1 = new BMWCar()
        myCar1.greeting()
        myCar1.info()
    }
}

//结果:
//Welcome to my car!
//This is a BMW car!

你可能感兴趣的:(Scala入门系列之七--scala中的继承)