class Base{ 
        int i; 
        Base(){ 
            add(1); 
            System.out.println(i); 
        } 
        void add(int v){ 
            i+=v; 
            System.out.println(i); 
        } 
        void print(){ 
            System.out.println(i); 
        }
    }
    class MyBase extends Base{ 
        MyBase(){ 
            add(2); 
        } 
        void add(int v){ 
            i+=v*2; 
            System.out.println(i); 
        }
    }
    public class TestClu { 
        public static void main(String[] args) { 
            go(new MyBase()); 
            //System.out.println(); 
        } 
        static void go(Base b){ 
            b.add(8); 
            //b.print(); 
        }
    } 
谁能帮我分析分析程序的运行顺序?非常感谢!

解决方案 »

  1.   

    你那两个void add() 是private还是public
      

  2.   

    结果是:
    2
    2
    6
    22分析:
    go(new   MyBase()); //这句先初始化MyBase,首先是父类的构造函数,执行add(1),这个add是子类的add而不是父类的add,所以结果是i= 2,然后打印2,add执行完了之后,父类构造函数还要打印i,所以又是2,现在再执行子类的构造函数,add(2),由于i=2,所以执行之后i= 2+ 2*2,所以为6,然后打印6. static   void   go(Base   b){   
                            b.add(8);   
                            //b.print();   
                    } 
          //这个时候再执行go函数,把b传进去,执行add函数,结果为 i= 6 + 2* 8 ,结果为22,所以打印22