scala中的类的继承

50 阅读2分钟

继承的基本概念

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

  • 父类(Superclass) :被继承的原有类(Scala 中所有类默认继承 AnyRef,对应 Java 的 Object)。
  • 子类(Subclass) :继承父类的新类,会获得父类的非私有属性和方法
  • 继承关键字extends

基本代码:

/**
 * 1. 类和对象(一个类,多个对象)
 * 2. new
 * 3. 构造函数,构造器
 * 4. 辅助构造器
 * 5. private,override,toString,equals,this
 * 6. apply 单例模式
 * 7. 伴生类 伴生对象
 * --------------------------------------------------------------
 * 8. 多个类
 * 9. 继承
 *    class 子类 extends 父类
 */

object class11 {
  //动物
  class Aniaml() {
    def eat():Unit={
      println("animal eat....")
    }
  }
  class Dog() extends Aniaml() {

  }

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

好处:不劳而获。 子类可以直接使用父类的属性和方法

基本代码:

object class12 {
  //动物
  class Aniaml() {
    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.eat()
    d1.run()
  }
}

继承方法重写

super.run 在子类中,调用父类的方法

基本代码:

/**
 * 11. 子类对父类方法的 重写
 *     在子类中,通过override 覆盖(重写) 父类的同名方法
 * 12. super. 在子类中访问父类
 */

object class13 {
  class Parent() {
    val name:String=""
    def run():Unit={
      println("run....")
    }
  }
  class Son extends Parent(){
    //如果希望对父类的方法进行改进:觉得不好
    override def run():Unit={
      super.run()  //super.run 在子类中,调用父类的方法
      println("开自动驾驶的车 run....")
    }
  }

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

scala中的继承与多态

面向对象编程的三大特征:封装,继承,多态

基本代码:

package level02

/** 1.类和对象(一个类,多个对象)
 * 2.new
 * 3.构造函数 - 构造器
 * 4.辅助构造器
 * 5.继承 extends
 *6. override 重写方法,toString, equals, this
 * 7.伴生类 伴生对象
 *8. 多个子类
 * 9.抽象类
 * 10.父类:不允许被 new 但是可以被继承可以有具体的属性和方法
 *11.子类和父类的方法的 重写
 *12.在子类中,通过 override 覆盖(重写)父类的同名方法
 * 13.super,访问子类中的父类
 *14.面向对象编程的三大特征:封装,____继承____,____多态____
 *
 */


object class05 {
  //动物
  class Fruit() {

    def eat():Unit={
      println("eat....")
    }
  }
  class Apple extends Fruit() {
    override def eat():Unit={

      println("吃掉果皮,,中间的不能吃.......")
    }

  }
  class Watermelon extends Fruit{
    override def eat():Unit={
      println("削皮,中间的最好吃")
    }
  }

  def main(args: Array[String]): Unit = {
    //
    def test(fruit: Fruit):Unit={
      fruit.eat()
    }
    val a1=new Apple()
    test(a1)//传入子类
    val w1=new Watermelon()
    test(w1)

  }
}