父类中的默认构造方法
如果父类拥有无参构造方法(无论隐式的还是显式的)且子类中的构造方法又没有明确指定调用父类的哪个构造方法,则子类中没有调用该子类其它构造方法的构造方法使用super()隐式调用父类的无参构造方法,如下代码:
package suris;
public class Father {
public Father() {//默认构造方法
super();//隐藏在Source中
System.out.println("父类方法");
}
public Father(double weight) {
}
public Father(String name) {
}
}
子类调用父类的构造方法
package suris;
public class Son extends Father {
public Son() {
super();//调用了父类中的默认构造方法
}
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、如果父类没有无参构造方法(无论隐式的还是显式的),则要求子类构造方法必须直接或间接指定
子类必须调用父类的构造方法