import java.util.Date;
  class Bass{
      public Bass(){
         m();
      }
    
      public void m(){
      }
  }  public class Sub extends Bass{
      private Date date;
      
      public Sub(){
         date=new Date(); 
      }
       public void m(){
         System.out.println(date);
      }
      
      public static void main(String[] args){
       Sub s=new Sub();
       s.m();
      }
}
以上代码输出两行,第一行为,null.第一行为时间。
那位高人能解释一下吗? 

解决方案 »

  1.   

    子类调用构造函数的时候必然先调用父类的构造函数
    Sub s=new Sub();调用Bass构造函数->调用m方法,动态绑定,调用Sub的m方法,此时Date还未被构造函数初始化,输出未null
    接着调用Sub的构造函数,初始化date,
    s.m()输出date结果就是,第一行null,第二行为时间
      

  2.   

    1) parent constructor先于 child constructor 调用
    2) 创建的是 Sub实例,所以m是属于sub的行为
    3) parent constructor 调用 m的时候 date 没有new 还
      

  3.   

    又是顺序问题,看看thingking in java吧,讲的够细了。
      

  4.   

    倒!cuo bie zi ,haha! thinking~~
      

  5.   

    用文字来表达就是要让一个人(某个对象object)干活(就是调用这个object的非静态方法)必须要让他先生出来(构造函数),而要让他生出来,他的父亲必须先于他生出来
      

  6.   

    要让一个人(某个对象object)干活(就是调用这个object的非静态方法)必须要让他先生出来(构造函数),而要让他生出来,他的父亲必须先于他生出来
    =============================================
    说得好!
      

  7.   

    believefym(暮色,miss,迷失,miss) 
    支持你的答案,正确!!
    我顶!!