父类构造方法对子类构造方法的影响
父类拥有无参构造方法
父类拥有无参构造方法(无论是隐式的还是显示的)且子类的构造方法中又没有明确指定调用父类哪一个构造方法,则子类中没有调用该子类其他构造方法的构造方法使用 super(); 隐式调用父类的无参构造方法。
虽然在这里我们将 super(); 注释掉了,但依旧默认调用了父类无参构造方法,这种调用又称为隐式调用。
父类没有无参构造方法
如果父类没有无参构造方法,即只有有参构造方法,那么子类构造方法必须直接或间接指定调用父类哪个构造方法,且要放在有效代码的第一行;
如上图;如果super(); 里面没有参数或者没有super(); 则程序会默认调用父类无参构造方法,又因为父类没有无参构造方法(有参构造方法会把默认的无参构造方法覆盖掉,即已有有参构造方法,就没有了无参构造方法,当然,如有需要可手动定义一个无参构造方法);故程序会报错
注意
1、super([参数]); 调父类构造方法需要放在构造方法内有效代码的第一行,否则会报错;
2、this([参数]); 调用同类的构造方法也需要放在构造方法内有效代码的第一行,否则会报错;
3、因此 super([参数]); 和 this([参数]); 不会也不能同时出现在同一个构造方法内;
4、子类构造方法必定会调用父类构造方法。