在创建子类对象时,类的加载顺序?
1.父类静态变量显式赋值、父类静态代码块。(静态之间按定义先后顺序) 2.子类静态变量显式赋值、子类静态代码块。(按定义顺序)
3.父类构造函数。 4.父类非静态变量显式赋值(父类成员变量)、父类非静态代码块。(非静态之间按定义顺序) 5.子类构造函数。 6.子类非静态变量(子类成员变量)、子类非静态代码块。(按定义顺序)。
总结:1.静态总是优先于非静态被加载,所以静态方法无法访问非静态变量、方法。非静态可以访问静态。2.在创建子类对象时,会先调用父类构造方法,在调用子类构造方法。
父类
public class Animal {
public static String name="lishi";//静态变量
public int age=12;
static {
System.out.println("父类静态变量:"+name);
System.out.println("父类静态代码块");
}
public Animal(){
System.out.println("父类构造方法");
}
}
子类
public class Dog extends Animal{
public static String name="dog";
static {
System.out.println("子类静态变量:"+name);
System.out.println("子类静态代码块");
}
public Dog(){
System.out.println("子类构造方法");
}
}
创建子类对象
public class Test {
public static void main(String[] args){
Dog dog=new Dog();
}
}
输出结果:
?
|