scala :类构造器的调用

28 阅读2分钟

构造器的调用顺序

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

创建一个子对象时, 先调用父类的构造器→子类的构造器

基本代码:

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.面向对象编程的三大特征:封装,____继承____,____多态____
 * 15.构造器的调用顺序:先调用父类的,再调用子类的
 */


object class06 {
  //动物
  class Fater() {
    println("Fater 的构造器....")
    }

  class Son extends Fater() {
    println("Son 的构造器.......")
    }
  def main(args: Array[String]): Unit = {
    //创建一个子对象时,
    // 先调用父类的构造器→子类的构造器
    new Son()

  }
}

当父类子类都存在带参数的构造器的时候,如何进行参数传递?

  • color属性有修饰符var,它是子类自己的属性。
  • nameage没有修饰符,因为它会从夫类继承过来。
  • Animal(name,age) 没有数据类型

基本代码:

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.面向对象编程的三大特征:封装,____继承____,____多态____
 * 15.构造器的调用顺序:先调用父类的,再调用子类的
 * 16.当父类子类都存在带参数的构造器的时候,如何进行参数传递?
 */


object class07 {
  // 父类
  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()

  }
}