Father.java
package lab03;
public class Father {
private int i=test();
private static int j=method();
static {
System.out.print("(1)");
}
Father(){
System.out.print("(2)");
}
{
System.out.print("(3)");
}
public int test() {
System.out.print("(4)");
return 1;
}
public static int method() {
System.out.print("(5)");
return 1;
}
}
Son.java
package lab03;
public class Son extends Father{
private int i=test();
private static int j=method();
static {
System.out.print("(6)");
}
Son(){
//super();
System.out.print("(7)");
}
{
System.out.print("(8)");
}
public int test() {
System.out.print("(9)");
return 1;
}
public static int method() {
System.out.print("(10)");
return 1;
}
//1.类初始化过程<clinit>():执行顺序为:从上到下依次执行静态代码块
//main方法所在的类需要先加载和初始化
//一个子类要初始化要先初始化父类
//首先打印输出父类与子类的4个静态方法:(5)(1)(10)(6)
public static void main(String[] args) {
Son s1=new Son();
//2.实例初始化过程<init>():执行顺序为:非静态代码块从上到下依次执行,而构造器代码最后执行
//(1).super()(最前) (9)(3)(2)
//(2).i=test() (9)
//(3).子类的非静态代码块(8)
//(4).子类的构造方法(最后)(7)
//(9)(3)(2)(9)(8)(7)
//先打印输出(9)是因为i=test()在1子类对象被重写了。
// 3.方法的重写
// 不被重写的方法:final方法,静态方法,private等子类不可见方法
System.out.println();
Son s2=new Son();
//再次执行<init>():
//(1).super()(最前) (9)(3)(2)
//(2).i=test() (9)
//(3).子类的非静态代码块(8)
//(4).子类的构造方法(最后)(7)
}
}