结果怎么是0,30,40. 0怎么解释???
class Test6 extends Test5
{
    int i=30; 
   Test6()
    {
      print();
        i=40;
    } 
    public static void main(String[] args) 
    
    {
       System.out.println(Test6().i);
    } 
   void print()
  {
     System.out.println(i);
  } 
}
class Test5 

    int i=10;
 
    Test5()
    {
        print();
        i=20;
    } 
    void print()
    {
        System.out.println(i);
    }
}

解决方案 »

  1.   

    System.out.println(Test6().i);
    这句是不是有问题啊?
      

  2.   


    public static void main(String[] args) 
        
        {
           System.out.println(Test6().i);这里有错吧!!!
        } 
      

  3.   

    System.out.println(Test().i);应该改为这样吧:
    Test6 test6=new Test6();
    System.out.println(test6.i);才能执行当一个对象被创建时,初始化是以下面的顺序完成的: 
    1.设置成员的值为缺省的初始值 (0, false, null)
    2. 调用对象的构造方法 (但是还没有执行构造方法体)
    3.调用父类的构造方法
    4. 使用初始化程序和初始块初始化成员
    5. 执行构造方法体
      

  4.   

    static int i=30; //加个static,否则有错
       Test6()
        {
    输出结果只有30
      

  5.   

    应该是System.out.println(new Test6().i);不好意思,输入错误!!!
      

  6.   

    呵呵,刚才只是吧Test6().i改为i,结果才是30
      

  7.   

    int i=30改为static int i=30;后结果是30,30,40
      

  8.   

    ^_^,static 变量i才能给static 方法!!!自己的见解,不对请改正!!!
      

  9.   

    Test6().i  先调用父类的构造方法,此时i还没赋值
      

  10.   

    同意heshanxingzhe()的,对象没有构造
      

  11.   

    但也可用隐行对象System.out.println(new Test().i);
      

  12.   

    这例子不错 稍微修改了下 lz 自己跑下 想一想
    class Test6 extends Test5

    {
    System.out.println("init");
    }
        int i=30; 
       Test6()
        {
          print();
            i=40;
        } 
        public static void main(String[] args) 
        
        {
           System.out.println(new Test6().i);
        } 
       void print()
      {
         System.out.println("test6.test");
         System.out.println(i);
      } 
    }
    class Test5 

        int i=10;
     
        Test5()
        {
            print();
            i=20;
        } 
        void print()
        {   System.out.println("test5.test");
            System.out.println(i);
        }
    }
      

  13.   

    好像有点明白,是不是父类的i被隐藏,而此时输出i,i还没有被重新赋值,所以输出0。
      

  14.   

    '0'是由Test6调用父类时Test5.print()函数输出的,i还没被手动赋值