/**
子父类构造函数
在对子类对象进行初始化时候,父类的构造函数也会运行,那是因为子类的构造函数默认第一行隐式的语句 super();super():会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super();
为什么子类一定要访问父类中的 构造函数 呢?
因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的
所以子类在对象初始化时,要先访问一下父类中的构造函数。
如果要访问父类中指定的构造函数,可以通过手动定义super语句(如:super(34))的方式来指定。
注意:
super语句一定定义在子类构造函数的第一行
结论:
子类的所有构造函数,默认都会访问父类中空参数的构造函数
因为子类每一个构造函数第一行都有一句隐式的 super();
当父类中没有空参数的构造函数时。子类必须手动通过super语句形式
来指定要访问的构造函数。当然。子类的构造函数第一行也可以手动指定this语句来访问本类(子类)的构造函数
子类中至少会有一个构造函数会访问父类中的构造函数。
其他的都理解了,但是 最后一句“ 子类中至少会有一个构造函数会访问父类中的构造函数。”这句不怎么理解,求谁帮我解释解释
- <p>
- class Father
- {
- Father()
- {
- System.out.println("Father run");
- }
- Father(int x)
- {
- System.out.println("Father .. run " + x);
- }
- }</p><p>class Son extends Father
- {
- Son()
- {
- //super();
- System.out.println("Son run");
- }
- Son(int x)
- {
- //super();
- //this(); //Father run Son run Son..3 因为:子类的所有构造函数,默认都会访问父类中空参数的构造函数
- super(54);//Father .. run 54 Son..3
- System.out.println("Son.."+x);
- }
- }
- class ExtendsTest4</p><p>{
- public static void main(String[] args)
- {
- Son s1= new Son(); //Father run Son run
- Son s2 = new Son(3);//Father .. run 54 Son..3 </p><p> }
- }
- </p>
复制代码 |