通过编写一个测试案例:
- 父类
public class Father {
private String name = "Father";
private int age = 30;
public Father(String name, int age) {
this.name = name;
this.age = age;
System.out.println("我是父类的构造方法");
System.out.println("我是父类构造后的属性:" + name + " " + age);
}
{
System.out.println("我是父类的属性:" + name + "," + age);
}
}
- 子类:
public class Son extends Father {
private String name = "Son";
private int money = 100;
public Son(String name, int age, int money) {
super(name, age);
this.money = money;
System.out.println("我是子类的构造方法");
System.out.println("我是子类构造后的属性:" + name + " " + age+ " " + money);
}
{
System.out.println("我是子类的属性:"+name+" "+money);
}
}
- 测试类
public class Test {
public static void main(String[] args) {
Son test = new Son("test", 24, 1000);
}
}
- 输出结果:
我是父类的属性:Father,30
我是父类的构造方法
我是父类构造后的属性:test 24
我是子类的属性:Son 100
我是子类的构造方法
我是子类构造后的属性:test 24 1000
在定义属性时为其定义了初始化值,父类的name=“Father”,age=30,在实例化的时候传参name=“test”,age=24, 程序先初始化代码块在初始化构造方法,从输出结果可以看出,代码块中输出的值为属性定义时的初始化值“Father”与30,接着输出的才是“我是父类的构造方法”与构造后的属性“test”与24;子类同理,也是按照这个顺序输出的
所以得知类先初始化属性再初始化构造方法,在继承中先初始化父类,在初始化子类。