抽象类

60 阅读1分钟
object Base70 {
  // 抽象类
  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)  // 输出:14500.0
  }
}

输出结果

image.png

object Base71 {
  // 抽象类
  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  // 工资增加10%
    }
  }

  def main(args: Array[String]): Unit = {
    // new DreamJob()  // 报错:抽象类不能直接实例化
    val pe1 = new PE()
    pe1.addMoney()  // 调用子类实现的抽象方法
    pe1.getMoney()  // 调用父类的具体方法,输出:发工资:15950.0元
  }
}

输出结果

image.png

  1. 抽象类 DreamJob 包含:

    • 抽象属性(moneyvacationboss):仅声明类型,无初始化值,需子类实现
    • 具体属性(name):有默认初始化值
    • 抽象方法(addMoney):仅声明方法签名,无实现,需子类实现
    • 具体方法(getMoney):有完整实现,可直接被子类继承使用
  2. 子类 PE

    • 继承抽象类 DreamJob 并实现了所有抽象属性和抽象方法
    • addMoney 方法实现为工资增加 10%
  3. main 方法

    • 抽象类不能直接实例化(注释掉的 new DreamJob() 会报错)
    • 通过子类 PE 实例化对象,调用方法后输出增长后的工资(14500 × 1.1 = 15950.0)