——子类和父类之间继承中构造函数的调用规则
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);
 }
}
保存为TestSuperSub.java
 
——对代码进行分析
1.对上面代码进行编译
子类和父类之间继承中构造函数的调用(一)
编译成功
结论:子类的构造过程中,必须调用其父类的构造方法;
 
2.注释子类无参数构造函数中调用父类的有参数的函数://super(300);
子类和父类之间继承中构造函数的调用(一)
编译成功,显示结果如上;
结论:子类的构造过程中,必须调用其父类的构造方法;无论子类中的构造方法是有参还是无参,如果在子类中没有写调用父类的有参构造方法,均调用父类的无参构造函数(注意:当父类中没有写无参和有参的构造函数,则父类会默认生成无参的构造函数)。
 
3.在1的基础上同时注释父类中的无参构造方法:
/*
 SuperClass(){
  System.out.println("SuperClass()");
 }
 */
子类和父类之间继承中构造函数的调用(一)
编译错误
 
4.注释主方法中的//SubClass sc2 = new SubClass(400);和父类中的无参构造函数
 /*
 SuperClass(){
  System.out.println("SuperClass()");
 }
 */
子类和父类之间继承中构造函数的调用(一)
编译错误
在注释子类中的有参构造函数:
/*
 SubClass(int n){
  System.out.println("SubClass("+n+")");
  this.n = n;
 }*/
子类和父类之间继承中构造函数的调用(一)
编译成功
结论:如果存在无参构造方法和有参构造方法的时候,只调用有参构成方法。

转载于:https://blog.51cto.com/weifeng10wu/820853

相关文章: