首先a A=new a();后打印一个a;
b B=new b();后首先调用父类构造方法,然后再调用子类构造方法。

解决方案 »

  1.   

    你这里第一步先是一个a A=new a();于是就打印了一个a
    接着你又b B=new b();由于b是继承a的,所以b就继承了a的方法和域,所以先会回到a调用a的方法,于是先打印了一个a,接着调用自己的方法,于是又打印了b
      

  2.   

    看一下《java虚拟机规范》吧,里面讲的很清楚
      

  3.   

    你构造子类的时候,都会首先调用父类的构造函数,在b里其实你省了super()这句话。
      

  4.   

    你的代码实际上编译时是这样的:class  a
    {
      public a()
      {
        System.out.println("a");
      }
    }
    public class b extends a
    {
      public b()
      {
        super();  //系统会自动添加这行    
        System.out.println("b");
      }
      
      public static void main(String[] arg)
      {
        a A=new a();  // 该句调用类a的构造方法,输出 a
        b B=new b();  // 该句调用类b的构造方法,其中第1句又调用了类a的构造方法,所以先输出a,再输出b
      }
    }
    子类构造方法一定会调用父类构造方法,而且要放在子类构造方法第1句.
    如果自己没有显式调用,系统会自动调用父类的无参构造方法,如果父类没有无参构造方法,会出错.
    要调用父类有参构造方法,自己必须在子类构造方法第1句加上调用语句.
      

  5.   

    你的代码实际上编译时是这样的:class  a
    {
      public a()
      {
        System.out.println("a");
      }
    }
    public class b extends a
    {
      public b()
      {
        super();  //系统会自动添加这行    
        System.out.println("b");
      }
      
      public static void main(String[] arg)
      {
        a A=new a();  // 该句调用类a的构造方法,输出 a
        b B=new b();  // 该句调用类b的构造方法,其中第1句又调用了类a的构造方法,所以先输出a,再输出b
      }
    }
    子类构造方法一定会调用父类构造方法,而且要放在子类构造方法第1句.
    如果自己没有显式调用,系统会自动调用父类的无参构造方法,如果父类没有无参构造方法,会出错.
    要调用父类有参构造方法,自己必须在子类构造方法第1句加上调用语句.good!!