抽象类

59 阅读2分钟

(一)理解抽象类

[讲] 类本身就是对对象的抽象,抽象类就是对类的抽象,就是一种更加模糊的类。

[讲] 定义:抽象类是一个包含一个或多个抽象方法的类。抽象方法是不带任何实现的方法。抽象类也可以包含具体的方法和属性。

[讲] 目的:抽象类的主要目的是为子类提供公共的接口和部分实现,并确保子类实现抽象方法。

定义抽象类

定义一个Scala的抽象类:abstract class A{ }

定义一个智能汽车 代码如下:

abstract class AICar(){  
  def autoRun():Unit  
  var name:String  
}

(三)继承抽象类

子类继承了抽象类,它就必须去实现所有抽象属性和抽象方法

package level02
/*
*  抽象类 abstract
* 1. 一个抽象类,不能被new
*   一个类不能直接用来创建对象,那么这个类具体有什么用呢?做别人的父类
* 2. 可以定义抽象方法,在子类中去实现
 */

object class12 {

  abstract class AICar {
  //  抽象方法没有具体的函数代码

    def autoEn():Unit
    // 具体方法
    def autoDrive  ():Unit={
      println("具体方法,自动驾驶..........")

    }
  }
// 在子类中,一定要去实现父类的所有抽象方法
  class SU7 extends AICar{
// 使用override ,去木实现这个方法
    override  def autoEn ():Unit={
      println(s"采用小米独家的无线充电技术,停车就可以充电")
    }

  }


  def main (args: Array [String]): Unit = {

   //  val car1 = new AICar ()
    val su = new SU7()
    su.autoEn()
  }
}

结果如下: 屏幕截图 2025-11-11 102902.png

(四)抽象类重写

如果子类中对抽象类中的方法定义不满意,仍可以使用override去覆盖的。

屏幕截图 2025-11-11 104227.png

抽象类重写代码如下:

package level02
object class14 {
  abstract class AICar() {

    // 1. 非抽象属性
    var name: String = "car"
    val color: String = "black"

    // 2. 具体方法
    def run(): Unit = {
      println("AICar run....")
    }

    // 3. 抽象属性,没有属性值
    var price: Double

    // 4. 抽象方法,没有方法体
    def autoRun(): Unit

    class XiaoMi extends AICar {
      // 重写
      // 1、重写属性
      name = "小米" // 对于var的属性,直接覆盖
      override val color = "激光蓝" // 对于val的属性,要添加override

      // 2、重写方法
      override def run(): Unit = {
        println("小米 run.....")
      }

      // 实现
      // 3、实现 抽象属性
      var price = 28.8

      // 4、实现 抽象方法
      def autoRun(): Unit = {
        println("小米自动巡航 ")
      }
    }

    def main(args: Array[String]): Unit = {
      var c1 = new XiaoMi()
      c1.autoRun()
      c1.run()
      println(c1.name)
      println(c1.color)
    }
  }
}