类的继承

51 阅读2分钟

回顾

object w40 {
/*1·类和对象(一个类class + 多个对象)
2·new 创建对象,new XXX()
3·构造函数,构造器
4·辅助构造器 this
5·private:私有的。不对外发布,在外面不可以访问。在家之外的地方,不可以被别人知道。。。
6·override:重写,覆盖...
7·toString:是每个对象都会自带的一个方法,当我们使用println时,它就会自动被8·调用,返回一个字符串,就是输出的内容
9·equals:在使用== 判断的时候,会自动调用  如果返回true,则相等  如果返回false则不相等

apply 单例模式
伴生类 伴生对象
多个类之间的关系:继承

 */
}

多个类之间的关系 继承


//重写:子类对父类的同名方法进行重写

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

    var car = "豪车"
  }

  //     子类     继承   父类
  class Nobody extends Boss {
    //子类自己的方法,与父类的方法不重名
    def run():Unit={

    }

    override def power(): Unit = {
      println("aaaaa")
    }
  }

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

父类和子类的构造器调用顺序:先调用父类构造器,再调用子类构造器

/*
父类和子类的构造器调用顺序:先调用父类构造器,再调用子类构造器
 */
object w39 {
    class Father() {
      println("Father 构造器被调用")
    }

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

    def main(args: Array[String]): Unit = {
      // new Father()
      new Son()
    }
}

子类 中华田园犬

object w41 {
  class Dog(var name:String,var age:Int) {
    println(s"Dog ${name},${age}构造器被调用")
  }
  /*
  子类  中华田园犬
  子类带参构造器
      1·继承父类的属性。不用写 val,var 修饰符
  父类构造器
     直接传入参数,不用写属性的类型
   */
  class RuralDog(name:String,age:Int) extends Dog(name, age) {
    println("RuralDog 的构造器...")
  }

  def main(args: Array[String]): Unit = {
    new RuralDog("旺财" ,3)
  }
}