总的来说,可以凝练成一句话:父类构造方法一定会被子类调用!!!
我们知道,在一个类中如果没有显式构造方法,则默认有隐式构造方法。当然也可以重载构造方法。无论在显示构造方法还是在隐式构造方法里,我们默认有一个super().在第一行。当然也可以自己写在构造方法里一个,super()。那么这时,那个默认的super()就失效了。
注意:super()和this()一样,只能在第一行。
那么如果这个构造方法第一行被this()占用了怎么办,既然出现了this(),那么一定调用了另一个构造方法,那么另一个构造方法中一定会出现super(),所以父类构造方法还是会被子类调用。
思考:如果父类中存在多个构造方法怎么办呢?如下图。
这就要求子类构造方法必须直接或间接指定调用父类哪个构造方法并且放在有效代码第一行。
- 比如我想要调用无参构造方法,那么这时只需super()就可以啦。
- 比如我想要调用int a 的有参构造方法,那么我在子类里的super就要写成super(22),括号中的参数类型为int,那么这时就会调用父类中 参数类型为int的构造方法。
- 比如我想要调用 double b的有参构造方法,那么我在子类里的super就要写成super(2.2),括号中的参数类型为double,那么这时就会调用父类中参数类型为double的构造方法。