有个A类  public class A{
   public A(){
     System.out.println("A");
    }
}

有个S类继承了A类    class S extends A{
               public S(){
                   System.out.println("S");
                   A a=new A();
                          }
                       }
最后有个测试类Test    public  class Test{
                public Test(){
                   System.out.println("Test");
                  }
           public static void main(String[] a){
              S b=new S();
                 }
              }最后的运行结果 是  A  S   A  请高手解释下 最后个A是怎么来的?  
         第1个A  是不是在加载S类的时候先 执行A a=new A();再把A类也加载,接着就输出了  第1个A
        加载完之后再运行S类中的输出语句 S,但最后个A 是怎么来的???

解决方案 »

  1.   


    class A {    public A() {
            System.out.println("A");   //第一个A
        }
    }class S extends A {    public S() {
            System.out.println("S");   //输出S 
            A a = new A();   //输出A , 这是第二个
        }
    }class Test {    public Test() {
            System.out.println("Test");
        }    public static void main(String[] a) {
            S b = new S();
        }

      

  2.   

    子类的构造方法会首先调用父类的构造方法,如果你不写super();编译器自动添加super();来调用父类的默认构造方法.
      

  3.   

    class A{
      public A(){
    System.out.println("父类构造方法");
        System.out.println("A");
        }
    }
    class S extends A{
                  public S(){
    System.out.println("子类构造方法");
                      System.out.println("S");
                      A a=new A();
                              }
                          }
    public  class Test{
                    public Test(){
                      System.out.println("Test");
                      }
              public static void main(String[] a){
                  S b=new S();
                    }
                  } 
    这样改一下楼主就应该了解构造方法的调用过程