日期:2025/04/06 15:53来源:未知 人气:53
23:41
1.1.1.继承中类加载的过程
问题:以下代码执行结果是什么?
classF{
static{
System.out.println("父类的静态代码块");
}
}
classZextendsF{
static{
System.out.println("子类的静态代码块");
}
}
public classTest {
public static voidmain(String[]args) {
newZ();
}
}
结论:类加载时,会先加载父类,再加载子类;
注意:一个类只会加载一次;所以如果一个子类的父类已经加载过了,那么再次加载那个父类的其他子类时,不会再加载父类;
1.1.2.子类实例化的过程
问题:以下代码执行结果是什么?
classF{
int a= 10;
public voidshow(){
System.out.println("a = "+a);
}
publicF(){
System.out.println("父类构造函数");
show();
}
}
classZextendsF{
int b= 20;
public voidshow(){
System.out.println("a = "+a+" ; b = "+b);
}
publicZ(){
System.out.println("子类构造函数");
show();
}
}
public classTest {
public static voidmain(String[] args) {
new Z();
}
}
结论:
1、子类实例化,只会创建一个对象(就是子类对象);
2、子类实例化,会在子类的对象空间中为父类的非静态成员也分配空间;
3、子类构造函数执行时,会通过隐式操作先调用父类构造函数执行;
4、构造函数执行时,哪个类的构造函数,负责为那个类的非静态成员变量显示赋值;