类的继承

35 阅读2分钟

(一) 继承的概念和基本语法

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

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

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


package level02

object l4 {
  class Aniaml(var name:String="动物") {

    val age:Int=10;

    def eat():Unit={
      println("animal eat......")
    }
    def run():Unit={
      println("animal run ......")
    }
  }
  class Dog() extends Aniaml(){

  }

  def main(args: Array[String]): Unit = {
    val d1=new Dog()
    d1.run()
    d1.eat()
  }

}

继承的好处之复用代码

那一个类继承了另一个类之后,有什么好处呢?


package level02

object l5 {
  class parent() {
    def run():Unit={
      println("run.....")
    }

  }
  class Son extends parent(){

    def run1 ():Unit={}
      override def run():Unit= {
        super.run()
        println("开自动驾驭的车 run......")
      }
  }

  def main(args: Array[String]): Unit = {
    val s1=new Son()
      s1.run()

  }

}

继承的特点:Dog就直接具备了animal的功能eating

(三)继承的方法重写

[问] 当子类从父类继承的方法不能满足需要时,子类需要有自己的行为,怎么办?此时使用使用 override 可以重写父类的方法。

[讲] 格式


package level02

object l8 {
  class Animal(var name:String,var age:Int) {
    println(s"父类的构造器被调用....${name},${age}")
    def say():Unit={
      println(s"Animal ${name},${age}")
    }
  }

  class Dog(name:String, age:Int,var color:String) extends Animal(name, age){
    println(s"子类的构造器被调用....${name},${age},${color}")
    override def say():Unit={
      super.say()
      println(s"狗狗....,我的颜色是${color}")
    }

  }
  def main(args:Array[String]):Unit={
    val d1=new Dog("旺财",1,"黑色")
    d1.say()

  }
}

继承与多态

[问] 面向对象的三个特点:_封装  继承 多态 。同一操作作用于不同的对象, 可以有不同的解释,产生不同的执行结果,这就是多态性。


package level02

object l5 {
  class parent() {
    def run():Unit={
      println("run.....")
    }

  }
  class Son extends parent(){

    def run1 ():Unit={}
      override def run():Unit= {
        super.run()
        println("开自动驾驭的车 run......")
      }
  }

  def main(args: Array[String]): Unit = {
    val s1=new Son()
      s1.run()

  }

}

(五)处理 构造器 的调用顺序

[问] 当我们实例化子类的对象时,是否需要调用父类的构造器? 是否需要调用子类的构造器?


package level02

object l7 {
  class Father() {
    println("Father的构造器....")
  }
  class Son extends Father(){
    println("Son的构造器....")
  }

  def main(args: Array[String]): Unit = {

    new Son()
  }

}

类的继承

1.继承的定义和语法

2.代码复用

3.代码重写

4.理解多态

5.构造器的调用顺序

什么是继承?

  • 实现继承要用:extends
  • 实现重写要用:override
  • new 一个子类的对象时,会先调用:类的构造器,再调用:类的构造器