构造器的调用顺序
构造器的调用顺序:先调用父类的,再调用子类的
创建一个子对象时, 先调用父类的构造器→子类的构造器
基本代码:
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,它是子类自己的属性。
- name,age没有修饰符,因为它会从夫类继承过来。
- 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()
}
}