抽象类

41 阅读1分钟

一.抽象类概念

抽象属性:只有属性名,没有具体的值。

二.定义抽象类

  • 抽象类:
  • ①. 有关键字 abstract
  • ②. 有抽象成员。只有属性名,没有具体的值,没有等号。
  • ③. 不能被 new
  • ④. 作用:给其他的子类立一个标准!
package level02

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

    // 子类:具体类
    class PE extends DreamJob {
      var money: Double = 16500
      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.子类要实现所有的抽象成员

package level02
object Class18 {
// 抽象类
abstract class DreamJob {
  // 抽象属性:只有属性名,没有具体的值
  var money: Double
  var vocation: Int
  var boss: String
  // 具体属性
  var name: String = "理想工作"

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

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

// 子类:具体类
class PE extends DreamJob {
  // 实现抽象属性
  var money: Double = 5000.0
  var vocation: Int = 6
  var boss: String = "无人"

  // 实现抽象方法
  def addMoney(): Unit = {
    money *= 1.1
  }
}

// 主程序入口
  def main(args: Array[String]): Unit = {
    // val dj = new DreamJob() // 错误,抽象类不能直接实例化
    val pe1 = new PE() // 实例化子类
    pe1.addMoney()
    pe1.getMoney()
  }
}

四.抽象类重写

  • 1.如果子类中对抽象类中的方法定义不满意,仍可以使用override去覆盖的
  • 2.注意:
  • (1)抽象类中的方法可以有抽象的和非抽象的,同样属性也可以有抽象的和非抽象的。
  • (2)抽象方法可以实现,而非抽象方法可以继承或重写。
  • (2)属性中对于抽象成员是必须要实现的,而非抽象成员可以继承或重写。
package level02
object Class18 {
// 抽象类
abstract class DreamJob {
  // 抽象属性:只有属性名,没有具体的值
  var money: Double
  var vocation: Int
  var boss: String
  // 具体属性
  var name: String = "理想工作"

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

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

// 子类:具体类
class PE extends DreamJob {
  // 实现抽象属性
  var money: Double = 5000.0
  var vocation: Int = 6
  var boss: String = "无人"

  // 实现抽象方法
  def addMoney(): Unit = {
    money *= 1.1
  }
  override def getMoney():Unit={
    println(s"上银行卡:${money}元")
  }
}
// 主程序入口
  def main(args: Array[String]): Unit = {
    // val dj = new DreamJob() // 错误,抽象类不能直接实例化
    val pe1 = new PE() // 实例化子类
    pe1.addMoney()
    pe1.getMoney()
  }
}