转载注明出处[https://www.jianshu.com/p/22ee61563566]
序
scala中“继承”这一概念与java有很大的不同。
1、只有主构造器可以调用父类(超类)的主构造器
2、可以重写超类中的字段
3、在子类中重写超类的抽象方法时不需要override关键字
4、重写一个非抽象方法必须使用override方法
抽象类
abstract class Car{ //抽象类,不能直接被实例化
val carBrand: String // 字段没有初始化,是一个抽象字段
def info() //抽象方法,不需要使用abstract关键字
def greeting() {println("hello")} //具体方法,不是抽象
}
定义一个抽象类,需要使用abstract关键字;定义抽象类中的抽象方法不需要abstract关键字,只需要方法体为空;抽象类中的字段只要没有初始化值,就是抽象字段,但是必须要声明类型。
class BenCar extends Car{
override val carBrand = "Ben" //重写抽象字段必须要override
def info() {printf("This car is a % car", carBrand)} //重写抽象方法不需要override,加上也不会报错
override def greeting() {println("hello!")} //重写超类的非抽象方法必须加上override
}
object MyCar {
def main(args : Array[String]){
val ben = new BenCar()
ben.greeting()
ben.info()
}
}