类的继承

31 阅读1分钟

继承的概念和基本语法

定义:在原有类的基础上定义一个新类,原有类称为父类,新类称为子类。

class 子类名 extends 父类名 { 类体 }

好处:复用代码和实现多态。复用代码:子类可以继承父类的特性。多态: 子类可以在自己内部实现父类没有的特性

package level2

object Sc70 {
  class Boss {
    def power(): Unit = {
      println("Boss 有权力....")
    }

    var car = "豪车"
  }

  class NoBody extends Boss {

  }

  def main(args: Array[String]): Unit = {
    val b = new NoBody()
    println(b.car)
    b.power()
  }
}

继承的方法重写

package level2

object Sc70 {
  class Boss {
    def power(): Unit = {
      println("Boss 有权力....")
    }

    var car = "豪车"
  }

  class NoBody extends Boss {
    def run():Unit = {

    }

    override def power():Unit = {
      println("老莫,我想吃鱼了")
    }
  }

  def main(args: Array[String]): Unit = {
    val b = new NoBody()
    println(b.car)
    b.power()
    b.run()
  }
}

构造器的调用顺序

package level2

object Sc71 {

  class Father() {
    println("Father 构造器被调用")
  }

  class Son extends Father() {
    println("Son 构造器被调用")
  }
  def main(args: Array[String]): Unit = {

    new Son()
  }
}

带参构造器的写法

package level2

object Sc72 {

  class Dog(var name:String, var age:Int) {
    println(s"Dog ${name}, ${age} 构造器被调用")
  }

  class RuralDog(name:String, age:Int) extends Dog(name, age) {
    println("RuralDog 的构造器...")
  }
  def main(args: Array[String]): Unit = {
    new RuralDog("旺财",3)
  }
}

相比父类,子类有新属性

package level2

object Sc72 {

  class Dog(var name:String, var age:Int) {
    println(s"Dog ${name}, ${age} 构造器被调用")
  }

  class RuralDog(name:String, age:Int, var color:String) extends Dog(name, age) {
    println(s"RuralDog 的构造器...${color}")
  }
  def main(args: Array[String]): Unit = {
    new RuralDog("旺财",3,"土黄色")
  }
}