/*
子父类中构造函数的特点:
在子类构造对象时,发现访问子类构造函数时,父类构造函数也运行了.
为什么呢?
原因是:在子类的构造函数中第一行有一个默认的隐式语句. super()
子类的实例化过程:子类中所有的构造函数都会默认访问父类中的空参数的构造函数.
为什么子类实例化的时候要访问父类中的构造函数呢?
那是因为子类继承了父类,获取到了父类中的内容(属性),所以在使用父类内容之前,
要看父类是如何对自己的内容进行初始化的.所以子类在构造对象是,必须访问父类中的构造函数.
为了完成这个必须的动作,就在子类的构造函数中加入了 super() 语句.
如果父类中没有定义空参数的构造函数,那么子类的构造函数就必须明确用 super() 调用父类中的
哪个构造函数.同时子类构造函数中如果使用 this() 调用了本类构造函数时,那么 super() 就没有了.
因为 super() 和 this() 都只能定义在第一行,只能有一个.但是可以保证的是,子类中肯定会有其他
构造函数访问父类中的构造函数.
注意,super 语句必修要定义在子类构造函数的第一行,因为父类的初始化动作要先执行.
*/
public class ExtendsDemo4 {
public static void main(String[] args) {
// new Zi_2() ; // A C
new Zi_2(6); // A D
}
}
class Fu_2 {
Fu_2() {
System.out.println("A Fu run");
}
Fu_2(int x) {
System.out.println("B Fu run" + x);
}
}
class Zi_2 extends Fu_2 {
Zi_2() {
// super() ; //调用的就是父类中的空参数的构造函数.
System.out.println("C Zi run");
}
Zi_2(int x) {
// this(); // A C D
// super() ; //A D
// super(6) ; //B D
System.out.println("D Zi run" + x);
}
}
子父类中构造函数的特点
最新推荐文章于 2022-03-05 10:56:00 发布