抽象类和内部类

34 阅读1分钟

抽象类

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

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

object Class18 {
  // 抽象类
  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)
  }
}
package level02

object Class19 {
  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 = 4500.0
    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()
  }
}
  1. 有关键字 abstract

  2. 有。

    1. 抽象成员。只有属性名,没有具体的值 没有 等号 。
    2. 具体成员。 3.子类要实现所有的抽象成员!
      如果要重写父类具体成员:使用override

内部类:在类的内部,写另一个类

package level02


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