package demo;
public class Test3 {
public static void main(String[] args) {
new B().run();
}
}
class A{
static{
System.out.println("A static ;");
}
{
System.out.println("A defalult ;");
}
A(){
System.out.println("A Class");
}
void run(){
System.out.println("A run");
}
}
class B extends A{
static{
System.out.println("B static ;");
}
{
System.out.println("B defalult ;");
}
B(){
System.out.println("B Class");
}
void run(){
System.out.println("B run");
}
}
运行结果:
A static ;
B static ;
A defalult ;
A Class
B defalult ;
B Class
B run
总结 : 生命子类对象时 总是先去加载父类的静态代码块,然后加载子类的静态代码块(静态代码永远是最先加载的),然后会加载父类中的默认代码块 和父类构造方法,然后是子类.
优先级: 静态代码块>代码块>构造方法 父类优先于子类
注意: 新建子类对象时 必须会加载父类构造器!