日期:2014-05-20  浏览次数:20711 次

思维有限,不知道该如何解决,有那位大侠给解释一下,下面代码的运行结果为什么这么奇怪?
public   class   Parent
{  
      public   void   test(){
                   
        }
     
      public   Parent(int   c){
      System.out.println( "this   hava   attribue   is   run. ");          
      }
         
      public   Parent(){                  
            test();  
      }                  
}
 
class   Child   extends   Parent
{
public   int   instanceValue   =   20;
     
  public   Child(int   c){          
  }

        public   void   test(){        
                System.out.println( "instance   value   is:   "   +   instanceValue);
          }
                   
        public   static   void   main(String[]   args){
                new   Child(1);
          }
}

------解决方案--------------------
我也刚学,说错了你们指出来.

运行时,父类的构造函数有先,父类里面调用了test()这个方法,因为子类重载他了,所以他不走父类的那个方法,直接走子类的.父类中没有这个instanceValue,所以运行时默认为0,
------解决方案--------------------
this hava attribue is run
每次对子类实例化时候 ,现调用父类的构造函数 ,那么根据参数判断首先是有上面那个语句输出;
然后调用子类的构造函数,由于没有做任何事情 所以无输出