抽象类:
如果一个类包含没有实现的成员,则必须使用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() } }