Scala中抽象类重写
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 = false def autoRun():Unit ={ println("Model3的自动驾驶技术") } //重写具体属性 -var 直接赋值 brand = "TSL" //重写具体属性 -val 使用override override val color :String = "white" //重写具体方法:使用override override 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() } }