1、子类继承父类时构造方法的调用规则如下:
(1)如果子类的构造方法中没有通过super显示调用 父类的有参构造方法,也没有通过this显示调用其自身的其它构造方法,则系统会默认先调用父类的无参构造方法,在这种情况下是否写super();语句,效果都一样:
实例如下:
1 package com.cn.jicheng2; 2 /* 3 * 父类A 4 */ 5 public class A { 6 private int age; 7 private String name; 8 public A(){ 9 10 } 11 public A(String name,int age){ 12 this.name=name; 13 this.age=age; 14 } 15 public void show(){ 16 System.out.println("姓名是:"+this.name+" 年纪是:"+this.age); 17 } 18 }
1 package com.cn.jicheng2; 2 /* 3 * 子类B 4 */ 5 public class B extends A{ 6 private String sex; 7 8 public String getSex() { 9 return sex; 10 } 11 12 public void setSex(String sex) { 13 this.sex = sex; 14 } 15 16 }
1 package com.cn.jicheng2; 2 3 public class Test { 4 public static void main(String[] args) { 5 B b=new B();//这个测试类中,实例了子类的对像,符合第一条规则,默认也会调用父类的无参数构造方法,父类的无参构造方法就是new A(); 6 //所以子类才可以调用父类的方法 7 b.show(); 8 } 9 }
(2)如果子类的构造方法中通过super显示调用父类的有参构造方法,那么将执行父类相应的构造方法,而不执行父类的无参构造方法
package com.cn.jicheng2; /* * 父类A */ public class A { private int age; private String name; public A(){ System.out.println("父类的无参构造方法输出"); } public A(String name,int age){ this.name=name; this.age=age; } public void show(){ System.out.println("姓名是:"+this.name+" 年纪是:"+this.age); } } package com.cn.jicheng2; /* * 子类B */ public class B extends A{ private String sex; public B(String name,int age) { super(name,age);//调父类的有参构造方法 } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } } package com.cn.jicheng2; public class Test { public static void main(String[] args) { B b=new B("jj",12); b.show(); } }
(3)如何子类的构造方法中通过this显示调用自身的其它构造方法,在相应构造方法中应用以上两条规则。