先看下面这个小程序class Base
{
         int i;
         Base()
     {
              add(1);
     }
        void add(int v)
     {
           i+=v;
     }
        void print()
     {
            System.out.println ( i );
     }
}
 
class Extension extends Base
{
       Extension()
       {
               add(2);
       }
       void add(int v)
       {
              i+=v*2;
        }
       
}
 
public class Test
{
    public static void main(String args[])
    {
         bogo(new Extension());
    }
    static void bogo(Base b)
    {
           b.add( 8 ) ;
           b.print();
    }
}哪位前辈能给说一下它的执行顺序?

解决方案 »

  1.   

    先执行bogo方法,然后调用Base类的构造函数,然后去调用Extension的add方法,在调用Extension的构造方法,在调用Extension.add(int v)方法,在执行b.add(8)最后打印,输出结果是22
      

  2.   

    ^_^楼上说得对,我帮你改了一下程序,这样更能理解,结果了.
    class Base{
             int i;
             Base()
         {
                  add(1);
         }
            void add(int v)
         {
               i+=v;
               print();\\注意这里没有执行,因为它调用的是子类的add()方法!
         }
            void print()
         {
                System.out.println ( i );
         }
    }
     
    class Extension extends Base{
           Extension(){
                   add(2);
           }
           void add(int v)
           {
                  i+=v*2;
                  print();
            }
           
    }
     
    class Test{
        public static void main(String args[]){
             bogo(new Extension());
        }
        static void bogo(Base b)
        {
               b.add( 8 ) ;
               b.print();
        }
    }
      

  3.   

    看看java编程思想里说的构造器的调用顺序就能明白了!
      

  4.   

    我还是不明白,i的值开始是0吗?
    interhanchi你能给我跟踪i的值走一遍程序吗
      

  5.   

    1.new Extension()先调用Extension的构造方法add(2),也就是i+=v*2;
    2.到父类找i,调用Base类的构造函数add(1),注意这是的add是调用Extension.add(int v)方法,所以i=2;
    3.又回到1中的i+=v*2,这是i=6,所以new Extension()的结果是i=6
    4.执行bogo方法,传递new Extension()堆的地址到bogo方法的参数,所以b.add( 8 ) 是调用Extension.add(int v)方法,i+=v*2;所以i=6+8*2=22不知道这样对不对
      

  6.   

    xwy1982(xwy1982) 说的还能听懂一些
    http://www.1110.net/down.asp?UserID=438698