package com.test;
class ClassA{
public static int param=1;
static{
param=4;
System.out.println("A-S1");//A-S1 3
System.out.println(param);
}
public ClassA(){
action();
}
public void action(){
System.out.println("A-a2");
}
}
public class ClassB extends ClassA{
public ClassB(){
param=1000;
}
public void action(){
System.out.println("param is"+param);
System.out.println("B-a1");
}
public static void main(String[] args) {
new ClassB();
}
}
=======================================================
从这段代码可以看出,当ClassB被实例化后,首先会去实例化父类,当父类有静态块的时候会先运行静态块。然后调用父类的无参构造方法,也就是调用action()。
这时候父类有个action.子类也有个Action。调用的是子类的action.
随便子类的构造方法中param=1000,但得出,父类的静态static只在静态代码块中改变值,
在子类构造方法中不会改变
所有输出A-S1 4 paramis 4 b-a1;
转载于:https://blog.51cto.com/sw3458856/1282123