抽象类

37 阅读1分钟

一.定义

  1. 有关键字,abstract
  2. 有抽象成员。只有属性名,没有具体的值,没有等号。
  3. 不能被new
  4. 有具体成员
  5. 子类要实现所有的抽象成员!!!
  6. 如果要重写父类具体成员,使用override
  7. 作用:给其他的子类立一个标准
  // 抽象类
    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)
    }
}

二.抽象类

(一).以下内容要在抽象类里面
  //具体属性
  var name: String = "理想工作"

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

  //具体方法
  def getMoney(): Unit = {
    println(s"发工资:${money}元")
  }
}
(二).如果要重写父类具体成员,使用override

    // 子类:具体类
    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

三.内部类

  1. 定义:在类的内部写另一个类
  2. 作用:整理代码,访问私有成员
  3. 注意:私有成员,不能在类的外部修改

  class C1 {
    class B1 {
      def say():Unit = {
        println("B1........")
      }
    }
  }
def main(args: Array[String]): Unit = {
  //1.创建一个c1的对象
  val c1 = new C1()
  //2.创建一个b1的对象
  val b1 = new c1.B1()
  b1.say()
}
}
  • 有私有成员
class C1 {
  //私有成员,不能在类的外部修改
  private  var score:Int = 85
  class B1 {
    def addScore(s:Int):Unit = {
      score += s
    }
    def say():Unit = {
      println("B1........")
    }
  }