(十九)抽象类

52 阅读2分钟

(一)理解抽象类

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

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

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

(二)定义抽象类

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

  • 代码如下
package level02

  /*
abstract: 抽象
* 抽象属性:只有属性名,没有具体的值。
* 抽象类。
*/
  object class17 {
    // 抽象类
    abstract class DreamJob {
      var money:Double // 只有属性名,没有具体的值。
      var vacation:Int
      var boss:String
    }

    // 子类:具体类
    class PE extends DreamJob{
      var money: Double = 14500
      var vacation: Int = 4
      var boss: String = "无人"
    }

    def main(args: Array[String]): Unit = {
      // new DreamJob() // 报错
      val pe1 = new PE()
      println(pe1.money)
    }
  }

注意

  1. 有关键字 abstract
  2. 有抽象成员。只有属性名,没有具体的值 没有 等号 。
  3. 不能new
  4. 作用:给其他的子类立一个标准!

定义抽象属性:var|val 属性名:类型 一个属性没有初始化,没有值

定义抽象方法:def 方法名():String 只声明没有实现方法。

(三) 抽象类重写

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

屏幕截图 2025-11-19 102142.png

  • 代码如下
package
object class18 {
  // 抽象类
  abstract class DreamJob {
    // 抽象属性
    var money:Double // 只有属性名,没有具体的值。
    var vacation:Int
    var boss:String
    // 具体属性
    var name:String = "理想工作"

    // 抽象方法:没有等号,就是一个抽象的方法,它需要在子类中去实现
    def addMoney():Unit

    // 具体方法
    def getMoney():Unit = {
      println(s"总工资:${money}元")
    }
  }

  // 子类:具体类
  class PE extends DreamJob {
    var money: Double = 14500
    var vacation: Int = 4
    var boss: String = "无人"

    def addMoney(): Unit = {
      money *= 1.1
    }
  }

  def main(args: Array[String]): Unit = {
    // new DreamJob() // 报错
    val pe1 = new PE()
    pe1.addMoney()
    pe1.getMoney()
  }
}

【修改代码,依次实现相关如下三条内容】重写要点

(1)抽象类中的方法可以有抽象的和非抽象的,同样属性也可以有抽象的和非抽象的。

(2)抽象方法可以实现,而非抽象方法可以继承或重写。

(2)属性中对于抽象成员是必须要实现的,而非抽象成员可以继承或重写。

  • 代码二
package level02
// 抽象类
abstract class DreamJob {
  var money: Double
  var vacation: Int
  var boss: String

  def addMoney(): Unit

  // 具体方法
  def getMoney(): Unit = {
    println(s"发工资:${money}元")
  }
}

// 子类:具体类
class PE extends DreamJob {
  var money: Double = 14500
  var vacation: Int = 4
  var boss: String = "无人"

  def addMoney(): Unit = {
    money *= 1.1
  }

  override def getMoney(): Unit = {
    println(s"上银行卡:${money}元")
  }
}

def main(args: Array[String]): Unit = {
  // new DreamJob() // 报错
  val pe1 = new PE()
  pe1.addMoney()
  pe1.getMoney()
}