本帖最后由 李天甲 于 2012-6-5 12:58 编辑
简单调试了以下,请看代码中的注释- class Base{
- private int i=2; //步骤4 然后再初始化父类的成员变量
- public Base(){ //步骤3 开始执行父类的构造函数,先开始构造父类
- this.display(); //步骤5 问题可能出在这里 父类的构造函数中调用子类的方法,转而执行子类的方法.
- // 这时候,父类中的私有变量 i 是已经定义的,而子类的还没有初始化
- }
- public void display(){
- System.out.println("the Base function i="+i);
- }
- }
- class Derived extends Base{
- private int i=22;
- public Derived(){ //步骤2 执行子类的构造函数 但是由于子类隐含了父类的构造函数,所以转而执行父类构造函数
- i=222;
- }
- public void display(){ //步骤6 父类调用子类的方法
- System.out.println("the Derived function i="+i); //最后输出7 嘿嘿,当然子类成员变量 i 还没有赋值呢.....
- }
- }
- public class test1 {
- public static void main(String[] args) {
- new Derived(); //步骤1 开始new对象
- }
- }
-
复制代码 |