/*定义父类Base1*/ public class Base1 { int a;// 定义一个变量 /* 父类构造方法 */ public Base1(int a) { this.a = a; System.out.println("调用了父类的有参构造方法!"); } public Base1() { a = 1; System.out.println("调用了父类的无参构造方法!!"); ; } public static void main(String[] args) { Son1 s1 = new Son1();// 利用子类的无参构造方法创建子类对象s1 Son1 s2 = new Son1(3, 4);// 利用子类的有两个参数的构造方法创建子类对象s2 Son1 s3 = new Son1(5);// // 利用子类的有一个参数的构造方法创建子类对象s3 s1.print(); s2.print(); s3.print(); } } /* 定义子类Son1*/ class Son1 extends Base1 { private int b; /* 子类类构造方法 */ public Son1() { b = 2; System.out.println("调用了子类的无参构造方法!!"); } public Son1(int a, int b) { super(a); this.b = b; System.out.println("调用了子类的有两个参数的构造方法!"); } public Son1(int b) { this.b = b; System.out.println("调用了子类的有一个参构造方法!"); } public void print() { System.out.println("a: " + a + ",b:" + b); } }
输出结果如下:
调用了父类的无参构造方法!! 调用了子类的无参构造方法!! 调用了父类的有参构造方法! 调用了子类的有两个参数的构造方法! 调用了父类的无参构造方法!! 调用了子类的有一个参构造方法! a: 1,b:2 a: 3,b:4 a: 1,b:5
由此可以得出结论:子类对象在实例化时会默认先去调用父类中的相应的构造方法,之后再调用子类中的相应构造方法。
本文出自 “10628473” 博客,请务必保留此出处http://10638473.blog.51cto.com/10628473/1765977
原文:http://10638473.blog.51cto.com/10628473/1765977