参考:https://blog.csdn.net/qq_27093465/article/details/70292221
class B extends A ,然后A类也就是父类里面有静态代码块,普通代码块,静态方法,静态成员变量,普通成员变量,普通方法。
子类也是这样,然后继承之后,关于程序打印输出的结果。
涉及到Java类的各种成员的初始化顺序。
经测试,得到如下结论:
执行顺序:按照下面的1-》2-》3-》4-》5-》6步骤
1.父类【静态成员】和【静态代码块】,按在代码中出现的顺序依次执行。
2.子类【静态成员】和【静态代码块】,按在代码中出现的顺序依次执行。
3.父类的【普通成员变量被普通成员方法赋值】和【普通代码块】,按在代码中出现的顺序依次执行。
4.执行父类的构造方法。
5.子类的【普通成员变量被普通成员方法赋值】和【普通代码块】,按在代码中出现的顺序依次执行。
6.执行子类的构造方法。
下面是测试的代码:
package math;
public class Parent {
static{
System.out.println("Parent--static--静态代码块");
}
{
System.out.println("Parent--普通代码块");
}
public Parent(){
System.out.println("Parent--构造器");
}public static int way(){
System.out.println("Parent--static-方法");
return 1;
}
public int way1(){
System.out.println("Parent---方法");
return 1;
}
private static int i=way();
private int i1=way1();
}
------------------------------------------public class Son extends Parent{
static{
System.out.println("Son--static--静态代码块");
}
{
System.out.println("Son--普通代码块");
}
public Son(){
System.out.println("Son--构造器");
}public static int way(){
System.out.println("Son--static-方法");
return 1;
}
public int way1(){
System.out.println("Son---方法");
return 1;
}
private static int i=way();
private int i1=way1();
}---------------------------
测试:
public static void main(String[] args) {
new Son();}
结果:
Parent--static--静态代码块
Parent--static-方法
Son--static--静态代码块
Son--static-方法
Parent--普通代码块
Son---方法(父类的方法被子类覆盖了)
Parent--构造器
Son--普通代码块
Son---方法
Son--构造器