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 ClassB defalult ;B ClassB run
总结 : 生命子类对象时 总是先去加载父类的静态代码块,然后加载子类的静态代码块(静态代码永远是最先加载的),然后会加载父类中的默认代码块 和父类构造方法,然后是子类.
优先级: 静态代码块>代码块>构造方法 父类优先于子类
注意: 新建子类对象时 必须会加载父类构造器!
新闻热点
疑难解答