子类与父类的在类的启动时,遵循父类先加载,子类后加载的规则,常会用作于坑爹笔试题。下面看代码解释。 有两个类 Parent 和 Child,Child extend Parent。
public class Parent
{
public static int parent;
static
{
System.out.println("This is Parent");
}
}
public class Child extends Parent
{
public static int child;
static
{
System.out.println("This is Child");
}
}
接下来,我们写一个Test测试类来测试这父子类的加载顺序
public class Test {
public static void main(String[] args) {
System.out.println(Child.child);
}
}
我们来输出Child里的child变量,结果为
This is Parent
This is Child
0
由此可看出,在访问Child里的静态成员变量child的时候,会引起类的加载,同时,子类加载之前,父类会先于子类加载。所以先输出父类结果,其次子类,最后自己的成员变量
紧接着,我们再写一个Test类来访问父类
public class Test {
public static void main(String[] args) {
System.out.println(Parent.parent);
}
}
结果为
This is Parent
0
由此可见,在加载父类的时候,子类不会被加载。这个比较容易理解,因为所有的对象的父类都是object,如果你加载object时,子类也加载了,那程序岂不是要崩溃。。。
最后,再用下面的写法再做一个测试,用子类去访问父类的静态成员变量
public class Test {
public static void main(String[] args) {
System.out.println(Child.parent);
}
}
结果为
This is Parent
0
子类还是没有被调用,这是为什么呢,这里需要注意,虽然使用了Child的类,但并没有访问Child的静态成员变量,所以不会引起Child类的加载,而父类Parent的静态成员变量被访问了,所以父类会加载。 结果就为上。