子类实例化时,默认调用父类的无参构造方法(不管子类的构造器有没有参数,因为子类继承的是父类的属性和方法,只调用父类的无参构造器就可以继承父类的属性和方法,因此不会调用父类的有参构造器),再调用子类的有参/无参构造器。
子类实例化有以下几种情况:
1.子类和父类都定义了带参和无参构造方法,且在子类中第一行写了super(xx);并且测试类里面实例化子类带参构造方法,那么,此时不会先调用父类的无参构造方法,而是先调用父类有参构造方法再调用子类的有参构造方法;
2.子类和父类同时具有有参和无参的构造方法,子类有参构造方法中第一行没有super(xx),且子类实例化有参构造方法,那么此时会先调用父类的无参构造方法,再调用子类的有参构造方法;
3.子类和父类同时具有有参和无参的构造方法,子类无参构造方法中第一行有super(),且子类实例化是无参构造方法,那么此时先调用父类的无参构造方法再调用子类的无参构造方法;
4.子类和父类同时具有有参和无参的构造方法,子类无参构造方法中第一行没有super(),且子类实例化时用的是无参构造方法,那么此时会先调用父类的无参构造方法,再调用子类的无参构造方法;
5.父类具有有参和无参的构造方法,但子类只有有参且第一行没有super(),那么子类实例化时会先调用父类的无参构造方法,再调用子类的有参构造方法;
6.父类具有有参和无参的构造方法,但子类只有无参且第一行没有super(),那么子类实例化时会先调用父类的无参构造方法,再调用子类的无参构造方法;
7.父类具有有参和无参的构造方法,但子类只有有参构造方法且第一行有super(),那么子类实例化时先调用父类的有参构造方法,再调用子类的有参构造方法;
8.父类具有有参和无参的构造方法,但子类只有无参构造方法且第一行有super(),那么子类实例化时先调用父类的无参构造方法,再调用子类的无参构造方法;
9.假如父类只有有参构造方法,子类也只有有参构造方法,那么子类的有参构造方法中必须写super(xx),不然编译会不通过。