object Main {
abstract class AICar {
def autoDrive(): Unit = {
println("具体方法,自动驾驶......")
}
}
class SU7 extends AICar {
// SU7 继承了 AICar 的 autoDrive 方法
}
def main(args: Array[String]): Unit = {
// val car1 = new AICar() // 这行会报错,因为抽象类不能被实例化
val su = new SU7()
su.autoDrive() // 输出:具体方法,自动驾驶......
}
}
抽象类的关键特点:
- 不能被实例化:
abstract class不能直接new - 作为父类:主要用途是让其他类继承
- 可以包含具体方法:如
autoDrive()方法 - 也可以包含抽象方法:只有声明没有实现的方法
抽象类 vs 特质(Trait)
在 Scala 中,抽象类与特质很相似,主要区别:
- 抽象类:单继承,可以有构造函数参数
- 特质:多继承,不能有构造函数参数
object Main {
abstract class AICar {
// 抽象方法:没有具体的函数代码
def autoCharge(): Unit
// 具体方法
def autoDrive(): Unit = {
println("具体方法,自动驾驶......")
}
}
// 在子类中,一定要去实现父类的所有抽象方法
class SU7 extends AICar {
// 使用 override 去实现这个方法
override def autoCharge(): Unit = {
println("采用小米抽象的无线充电技术,停车就可以充电")
}
}
def main(args: Array[String]): Unit = {
// val car1 = new AICar() // 错误:抽象类不能被实例化
val su = new SU7()
su.autoCharge() // 输出充电信息
su.autoDrive() // 输出驾驶信息
}
}