scala中的方法可以是抽象的和非抽象的,同样属性也可以是抽象和非抽象的。抽象方法可以实现,而非抽象方法可以继承或重写。属性中对于抽象成员是必须要实现的,而非抽想成员可以继承或重写。
如果子类中对抽象类中的方法定义不满意,仍可以使用override去覆盖的,也可以使用super来引用父类的成员.
注意事项
-
子类要重写父类中的某一个方法,该方法必须要使用override关键字来修饰
-
可以使用override来重写一个val字段.
-
注意: 父类用var修饰的变量, 子类不能重写
//定义抽象类 //抽象类是一个包含一个或多个抽象方法的类 //抽象方法:没有方法体,只有def和方法名 abstract class AICar(){ //具体属性var brand = "x"val color = "red"//抽象属性没有var hasDriver:Boolean//具体方法有def run():Unit = {println("run...")}//抽象方法def autoRun }//定义一个子类来实现(继承)抽象类 class Model3 extends AICar{//子类要实现所有的抽象方法:抽象方法+抽象属性var hasDriver = falsedef autoRun():Unit ={println("Model3的自动驾驶技术")}//重写具体属性 -var 直接赋值brand = "TSL"//重写具体属性 -val 使用overrideoverride val color :String = "white"//重写具体方法:使用overrideoverride def run():Unir={println(s"Model3 run...${color} ${brand}")} } object day15 {def main(args: Array[String]): Unit = {//抽象类,不能new//new AICar()val m1 = new Model3()m1.run() // m1.autoRun()}}