如果父类拥有无参构造方法(无论隐式的还是显式的)且子类中的构造方法又没有明确指定调用父类的哪个构造方法,则子类中没有调用该子类其它构造方法的构造方法使用super()隐式调用父类的无参构造方法,如下代码:
package suris; public class Father { public Father() {//默认构造方法 super();//隐藏在Source中 System.out.println("父类方法"); } public Father(double weight) { } public Father(String name) { } }super调用父类构造方法,该行代码必须放在有效代码行的第一行
package suris; public class Son1 extends Father { public Son1(){ super(); System.out.println("子类方法"); } }体现出super()调用方法应该在代码块有效代码的第一行
如果一个构造方法没有调用本类中的其它构造方法,构造方法默认有一个super();
package suris; public class Son1 extends Father { public Son1(){ // super(); System.out.println("子类方法"); } public static void main(String[] args) { } }反之没有super(),但是如果被调用的构造方法没有调用本类其它构造方法,则该构造方法由super()
package suris; public class Son extends Father { public Son() { this(12);//调用了本类的其他方法,*所以该方法的代码块中没有调用父类的默认方法(super())* } public Son(int i) { //super();*如果没有父类的Object方法,就会报错,因为没有调用父类的默认构造方法* } public static void main(String[]args) { new Son(); } }总结:1、子类中该构造函数没有使用this();调用本类中其它构造函数,所有该函数中使用隐含的super()调用父类无参构造函数。 2、子类中该构造函数使用this()调用本类无参构造函数,则该构造函数中不存在super()调用父类无参构造函数的情况,这一点可以通过分析运行程序后的结果看出来 3、如果父类没有无参构造方法(无论隐式的还是显式的),则要求子类构造方法必须直接或间接指定 子类必须调用父类的构造方法