package test;
public class SuperC {
static int i=10;
SuperC(){
print();
}
void print(){
System.out.println(i);
}
}package test;
public class Sub extends SuperC{
int j=30;
Sub(){
print();
j=40;
}
void print(){
System.out.println(j);
}
public static void main(String[] args) {
System.out.println(new Sub().j);
}
}
以上代码的运行结果:0 30 40。
执行顺序:
- 由于父类构造器调用了print()方法,子类又重写了print()方法,父类的print()方法不会被调用。先创造SuperC的构造器,调用子类的print()方法,此时i还未被赋值,默认为0,所以 先打印0
- 父类初始化结束。初始化子类的成员变量,j=30。执行子类的构造器,调用print(),打印30。
- 然后j被赋值成40,最后打印子类的实例的j属性40。