大三寒假学习 spark学习 Scala面向对编程 继承

抽象类:

  如果一个类包含没有实现的成员,则必须使用abstract关键词进行修饰,定义为抽象类。

abstract calss Car{
    // 是抽象类,不能直接被实例化
    val carBrand: String //字段没有初始值,就是一个抽象字段
    def info() //抽象方法,不需要abstract关键字
    def greeting() {
        println("Welcome to my car!")
    }
}

  关于上面的定义,说明几点:

  (1)定义一个抽象类,需要使用关键字abstract。

  (2)定义一个抽象类的抽象方法,也不需要关键字abstract,只要把方法体空着,不写方法体就可以。

  (3)抽象类中定义的字段,只要没有给出初始化值,就表示是一个抽象字段,但是,抽象字段必须要声明类型,否则编译会报错。

abstract class Car{
    // 是抽象类,不能直接被实例化
    val carBrand: String //字段没有初始值,就是一个抽象字段
    def info() //抽象方法,不需要abstract关键字
    def greeting() {
        println("Welcome to my car!")
    }
}
class BMWCar extends Car{
    override val carBrand = "BMW" //重写超类字段,需要使用override关键字,否则编译报错
    def info() {
        printf("This is a %s car. It is on sale",carBrand)//重写超类抽象方法,不需要使用override关键字,不过,加上不会报错
    }
    override def greeting(){
        println("Welcome to my BMW car!")//重写超类非抽象方法,必须使用override关键字
    }
}
class BYDCar extends Car{
    override val carBrand = "BYD" //重写超类字段,需要使用override关键字,否则编译报错
    def info() {
        printf("This is a %s car. It is cheap",carBrand)//重写超类抽象方法,不需要使用override关键字,不过,加上不会报错
    }
    override def greeting(){
        println("Welcome to my  BYD car!")//重写超类非抽象方法,必须使用override关键字
    }
}
object MyCar{
    def main(args: Array[String]){
        val myCar1 = new BMWCar()
        val myCar2 = new BYDCar()
        myCar1.greeting()
        myCar1.info()
        myCar2.greeting()
        myCar2.info()
    }
}

 

posted @ 2022-01-15 17:46  风吹过半夏  阅读(21)  评论(0编辑  收藏  举报