抽象类

165 阅读3分钟

理解抽象类

abstract:抽象

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

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

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

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

定义抽象类


object Class06 {
 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)
 }
}

结果: image.png

继承抽象类

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

/*
*abstract:抽象
*
* 抽象属性:只有属性名,没有具体的值。
*
* 抽象类:
* 1.有关键字 abstract
* 2.有
*    1.抽象成员。只有属性名,没有具体的值  没有 等号。
*    2.具体成员。
* 3.子类要实现所有的抽象成员!
*   如果要重写父类具体成员,使用override
 */
object Class07 {
 //抽象类
 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
 }
 override def getMoney(): Unit = {
  println(s"上银行卡:${money}元")
 }
 }
 def main(args: Array[String]): Unit = {
  //  new DreamJob()
  val pe1 = new PE()
  pe1.addMoney()
  pe1.getMoney()
 }
}

结果:

image.png

抽象类重写

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

/*
*abstract:抽象
*
* 抽象属性:只有属性名,没有具体的值。
*
* 抽象类:
* 1.有关键字 abstract
* 2.有
*    1.抽象成员。只有属性名,没有具体的值  没有 等号。
*    2.具体成员。
* 3.子类要实现所有的抽象成员!
*   如果要重写父类具体成员,使用override
 */
object Class07 {
 //抽象类
 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
 }
 override def getMoney(): Unit = {
  println(s"上银行卡:${money}元")
 }
 }
 def main(args: Array[String]): Unit = {
  //  new DreamJob()
  val pe1 = new PE()
  pe1.addMoney()
  pe1.getMoney()
 }
}

内部类

/*
*内部类:在类的内部,写另一个类
*/
object Class08 {
 class C1 {
  class B1 {
   def say():Unit={
    println("B1......")
   }
  }
 }
 def main(args: Array[String]): Unit = {
  //  创建一个c1的对象
  val c1=new C1()
  
  //2.创建一个B1的对象
  val b1=new c1.B1()
  b1.say()
 }
}