/**
* 此题是经典实例
* @author HS
*
*/
class Supper {
int i = 10;
public Supper() {
//System.out.println("111111");
print();
i = 20;
}
public void print() {
System.out.println("Supper==="+i);
}
}
class Sub extends Supper {
int i = 30;
public Sub() {
//System.out.println("222222");
print();
super.print();
i = 40;
}
public void print() {
System.out.println("Sub==="+i);
}
}
public class TestExtends {
public static void main(String[] args) {
new Sub();
}
}
运行结果为:
原因:因为创建子类对象的时候,执行代码的对象是子类对象,子类重载了父类的print方法,所以会调用子类的print方法,此时i已经被初始化,但是i的赋值是在分配函数入口之后,对象构造函数执行之前,此时还没有被赋值,所以是0.