抽象类

53 阅读1分钟
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()  // 输出:具体方法,自动驾驶......
    }
}

抽象类的关键特点:

  1. 不能被实例化abstract class 不能直接 new
  2. 作为父类:主要用途是让其他类继承
  3. 可以包含具体方法:如 autoDrive() 方法
  4. 也可以包含抽象方法:只有声明没有实现的方法

抽象类 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()   // 输出驾驶信息
    }
}