package Test;
/**
* super
* static 静态初始化块,从属于类,比普通构造方法优先级要高
* @author pmc
*
*/
public class Super {
public static void main(String[] args){
System.out.println("main方法");
bc b1=new bc();
b1.f();
}
}
class ac{
int value;
ac(){
System.out.println("父类");
}
public void f(){
value=100;
System.out.println("aClass.value="+value);
}
static {
System.out.println("父类-静态块");
}
}
class bc extends ac{
int value;
bc() {
//super();//隐式的调用super(),不写也调用
System.out.println("子类");
// TODO Auto-generated constructor stub
}
public void f(){
super.f();
value=200;
System.out.println("bClass.vlaue="+value);
System.out.println(value);
System.out.println(super.value);
}
static {
System.out.println("子类-静态块");
}
}
继承树追溯{子类.super()->父类.super()->Object,执行Object->父类->子类}
【查找h】
1.查找当前类中没有属性h
2.依次上溯每个父类,查看每个父类中是否有h,直到Object
3.如果没有找到,则出现编译错误。
4.上面步骤,只要找到h变量,则这个过程终止。
构造方法调用顺序:
构造方法第一句总是:super()来调用父类对应的构造方法。所以,流程就是:先向上追溯Object,然后再依次向下执行类的初始化块和构造方法,直到子类为止。
ps:静态初始化块调用顺序,与构造方法调用顺序一样,不再重复。