关于继承中的构造器调用和调用顺序,做了个小测试,如下:
class People { String name; //2,第二步,调用此无参构造器 public People() { System.out.println("、父类的无参构造器"); } //5,调用此有参构造器 public People(String name) { System.out.println("、父类的有参构造器"); this.name = name; } } class Child extends People { People father; public Child() { System.out.println("、子类的无参构造器"); } //3,创建使历史传递了参数"mike",所以第三步会调用子类有参构造器 public Child(String name) { System.out.println("、子类的有参构造器"); this.name = name; //4,此处创建了People的实例并传递了参数,所以会调用父类有参构造器 father = new People(name + ":F"); } public static void main(String[] args) { System.out.println("子类创建实例时的构造函数调用顺序:"); new Child("mike");//1,创建子类实例,由于Child类没有显示调用People的构造器,所以默认调用People的无参构造器 // new Child();//不传递参数,则第一步调用父类无参构造器,然后调用自身的无参构造器。 } }
当前状态下执行main方法,输出如下内容:
子类创建实例时的构造函数调用顺序:
、父类的无参构造器
、子类的有参构造器
、父类的有参构造器
若子类没有显示调用父类构造器,当子类创建实例时 ,会调用父类的无参构造器,若父类没有无参构造器,则会报错。
时间: 2024-10-17 00:40:26