程序1:class  A{
public  A(){
System.out.println(“A”);
aMethod(); }
public  void  aMethod(){
System.out.println(“in  class  A”);}
}
public  class  B  extends  A{
public  B(){
System.out.print(“B”); }
public  void  aMethod(){
System.out.println(“in  class  B”);}
public static void main(String[ ]  args){
new  B( ); }
}
输出结果:A
         in  class  B
         B
         Press any key to continue...
问题是:为什么A 会先输出来?程序2:
      class First{
public First(){
    aMethod();}
        public void aMethod(){
    System.out.println("in First");
                              }}
                            
      class Test extends First{
           public Test(){
              aMethod();}
           public void  aMethod(){
              System.out.println("in Test");
                               } 
        
           public static void main(String args[]){
         new Test();  
                                   }
                                     }

运行输出结果:
              in Test
            in Test
            Press any key to continue...
问题2:为什么 in Test 输出2次。
在线等
谢谢了!
            

解决方案 »

  1.   

    问题1:B是A的子类,创建B对象时会先调用A的构造函数
    问题2:同理
      

  2.   

    2 虽然调用了父类的构造器,但其调用的 aMethod() 已经在子类中重写了(Override), 所以实际调用的是子类的aMethod();
      

  3.   

    给你个参考代码,调用父类的方法
    public class Test extends First {
      public Test() {
        super.aMethod();
      }  public void aMethod() {
        System.out.println("in   Test");
      }  public static void main(String args[]) {
        new Test();
      }
    }class First {
      public First() {
        aMethod();
      }  public void aMethod() {
        System.out.println("in   First");
      }
    }
      

  4.   

    谢谢5楼,我也学到了一点,就是"虽然调用了父类的构造器,但其调用的   aMethod()   已经在子类中重写了(Override),   所以实际调用的是子类的aMethod();"字字珠玑啊