——子类和父类之间继承中构造函数的调用规则
1.子类的构造过程中,必须调用其父类的构造方法
2.如果子类的构造方法中没有显示的调用基类构造方法,则系统默认调用基类无参数的构造方法
1.子类的构造过程中,必须调用其父类的构造方法
2.如果子类的构造方法中没有显示的调用基类构造方法,则系统默认调用基类无参数的构造方法
——代码
class SuperClass{
private int n;
SuperClass(){
System.out.println("SuperClass()");
}
SuperClass(int n){
System.out.println("SuperClass("+n+")");
this.n = n;
}
}
class SubClass extends SuperClass{
private int n;
SubClass(int n){
System.out.println("SubClass("+n+")");
this.n = n;
}
SubClass(){
super(300);
System.out.println("SubClass()");
}
}
public class TestSuperSub{
public static void main(String[] args){
SubClass sc1 = new SubClass();
SubClass sc2 = new SubClass(400);
}
}
private int n;
SuperClass(){
System.out.println("SuperClass()");
}
SuperClass(int n){
System.out.println("SuperClass("+n+")");
this.n = n;
}
}
class SubClass extends SuperClass{
private int n;
SubClass(int n){
System.out.println("SubClass("+n+")");
this.n = n;
}
SubClass(){
super(300);
System.out.println("SubClass()");
}
}
public class TestSuperSub{
public static void main(String[] args){
SubClass sc1 = new SubClass();
SubClass sc2 = new SubClass(400);
}
}
保存为TestSuperSub.java
——对代码进行分析
1.对上面代码进行编译
编译成功
结论:子类的构造过程中,必须调用其父类的构造方法;
2.注释子类无参数构造函数中调用父类的有参数的函数://super(300);
编译成功,显示结果如上;
结论:子类的构造过程中,必须调用其父类的构造方法;无论子类中的构造方法是有参还是无参,如果在子类中没有写调用父类的有参构造方法,均调用父类的无参构造函数(注意:当父类中没有写无参和有参的构造函数,则父类会默认生成无参的构造函数)。
3.在1的基础上同时注释父类中的无参构造方法:
/*
SuperClass(){
System.out.println("SuperClass()");
}
*/
SuperClass(){
System.out.println("SuperClass()");
}
*/
编译错误
4.注释主方法中的//SubClass sc2 = new SubClass(400);和父类中的无参构造函数
/*
SuperClass(){
System.out.println("SuperClass()");
}
*/
SuperClass(){
System.out.println("SuperClass()");
}
*/
编译错误
在注释子类中的有参构造函数:
/*
SubClass(int n){
System.out.println("SubClass("+n+")");
this.n = n;
}*/
SubClass(int n){
System.out.println("SubClass("+n+")");
this.n = n;
}*/
编译成功
结论:如果存在无参构造方法和有参构造方法的时候,只调用有参构成方法。
转载于:https://blog.51cto.com/weifeng10wu/820853