java 继承时 子父类的构造函数关系
- /*3、构造函数
- 在对子类对象进行初始化时,父类的构造函数也会运行。
- 因为子类的构造函数默认第一行有一条隐式的语句super();
-
- super():会访问父类空参数的构造函数,而且子类中的所有构造函数默认第一行都是super()(没有this语句时)
- 为什么子类一定要访问父类中的构造函数?
- 因为父类中的数据子类可以直接获取。所以子类对象建立时,需要查看父类是如何对这些数据进行初始化的
- 所以子类在对对象初始化时,要先访问一下父类中的构造函数
- 如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定
- 注意:super语句一定定义在子类构造函数的第一行
- 结论:(子类的实例化过程)
- 子类的所有构造函数,默认都会访问父类中空参数的构造函数
- 因为子类的每一个构造函数内的第一行都有一句隐式super()(先调用this也一样);
-
- 当父类中没有空参数的构造函数时,子类必须通过super语句形式,显式的指定访问父类的构造函数
- 子类中的构造函数至少有一个构造函数会访问父类的构造函数*/
- class Fu
- {
- /**构造函数*/
- /**空参数的构造函数,子类构造函数默认访问这个,当手动建立带参数的构造函数时,
- 子类中的构造函数必须通过super语句指定访问父类的构造函数,否则编译失败,提示找不到构造函数*/
- // Fu(int n) //使用这个,子类没有super语句指定时,编译失败
- Fu()
- {
- System.out.println("Fu run");
- }
- }
- class Zi extends Fu
- {
- /**构造函数*/
- Zi()
- {
- // super(); //隐式的语句
- // super(2); //当父类构造函数为Fu(int n)时,需使用此super语句指定访问父类的构造函数
- System.out.println("Zi run");
- }
- }
- class ExtendsDemo2
- {
- public static void main(String[] args)
- {
- Zi z = new Zi(); /**new 时,先加载Fu类,然后加载Zi类*/
- }
复制代码
|
|