scala中可以用abstract来定义一个抽象类,抽象类不可以被创建对象,只可以被继承
下面总结几个关键点:
- 如果抽象类中的属性没有赋值,那么子类中一定要重写父类中的属性,如果父类中的属性时val定义的,那么子类中重写的属性必须要加
override
关键字,如果是var定义的可以不用加override
(推荐都加上override) - 如果抽象类中的方法没有方法体,那说明该方法时抽象方法,被子类继承时需要重写所有的抽象方法,可以不用加
override
(推荐都加上),如果子类想要重写父类中的普通方法,那么必须要加上override
关键字 - 注意,无论父类是抽象类还是普通类,使用 override 时不允许重写父类中的变量(var),运行时会报异常
//首先定义一个抽象类Pet
abstract class Pet {
val name:String = ""
val gender:String
def eat()={
println("宠物吃饭")
}
def play()
}
//再定义个Cat用来继承Pet
class Cat extends Pet {
override def eat(): Unit = super.eat()
def play(): Unit = {println("小猫玩球")}
//val定义的属性,被重写必须要写override
override var name: String = ""
override val gender: String = ""
}
当父类中的变量var被子类重写时,运行时会报错
abstract class Parent(var name:String){
var age:Int=0
//省略方法声明
}
//运行错误
class Child(override var name:String,override var age:Int) extends Parent(name)
正确写法:将var换成val
class Parent(val name:String){
val age:Int=0
//省略方法定义
}
class Child(override val name:String,override val age:Int) extends Parent(name)