代码
Superclass
package FatherSon;
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;
}
}
Subclass
package FatherSon;
public class Son extends Father{
private int i = test();
private static int j = method();
static {
System.out.print("6,");
}
Son(){
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;
}
public static void main(String[] args) {
Son s1 = new Son();
System.out.println();
Son s2 = new Son();
}
}
分析过程
1.类加载过程
在new对象之前,底层先执行(),方法。加载类。
由于子类继承父类,所以先加载父,再加载子。
输出:5,1,10,6
类加载,只执行一次。
2.实例加载过程
实例加载发生在类加载完成后。
构造器最后,加载。
输出结果:
5,1,10,6,9,3,2,9,8,7,
9,3,2,9,8,7,
3.方法重写(override)
子类重写父类的方法,后,加载子类的方法。
静态的方法,不能被重写。所在method()方法没有被重写。
Ps:静态的方法,被final修饰的方法,父类私有的方法。都不能被重写。