继承的初始化顺序
B类继承A类后,new B()后执行顺序如下:
1、执行A类的静态方法(只执行一次)
2、执行B类的静态方法(只执行一次)
3、执行A类的成员变量的赋值(没有赋值操作则忽略此步)
4、执行A类的构造方法
5、执行B类成员变量赋值(没有赋值操作则忽略此步)
6、执行B类的构造方法
如果此时再次new B() ,步骤1-2静态方法已经执行过,不会再执行,执行步骤3-6
public class Person {private String name = "person";static {System.out.println("Person父类静态代码块");}public Person() {System.out.println("Person父类构造方法");}public String getName() {return name;}public void setName(String name) {this.name = name;}
}public class Student extends Person{private int age = 18;static {//静态代码块System.out.println("Student子类静态代码块");}Student(int age) {this.age = age;System.out.println("Student子类构造方法");}public static void main(String[] args) {Student s1 = new Student(20);System.out.println("name=" + s1.getName());System.out.println("age=" + s1.getAge());Student s2= new Student(24);System.out.println("name=" + s2.getName());System.out.println("age=" + s2.getAge());}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
运行后代码结果: