我心流浪 2012-07-18 09:51
浏览 217
已采纳

关于构造方法调用的问题

现在这样一个问题,不明白想请会的讲解下,问题如下:
现有三个类: 一个Father类,一个Son类,继承Father类,一个测试类Test,代码如下:
public class Father { 
 public int value=100;             // 这里为1
 public Father(){                  // 这里为2
  int i=20;                // 这里为3
  System.out.println(i);   // 这里为4
 }
}

public class Son extends Father {
 public int id=200;                  // 这里为5
 public Son(){                       // 这里为6
  int j=10;           // 这里为7
  System.out.println(j);     // 这里为8
 }
}

public class Test{
    public static void main(String[] args){
        Father f=new Son();                   // 这里为9
    }
}

现在我在Test中的主方法main那里设置断点:用debug as 调试,只按F5,
我想问下为什么执行顺序会是:9→6→2→1→3→4→5→7→8→9
请各位大神级人物讲解下,尤其为什么有1与5这两个步骤,还有从9到6再到2,好像没有进入构造方法内部,这样子调用起什么作用,或者有什么含义?

  • 写回答

4条回答 默认 最新

  • luoyu1234 2012-07-18 15:15
    关注

    这是因为继承。继承的话一定是先初始化父辈的属性和方法,这样暴露给后辈的方法或属性才能被使用。
    9到6不用说了吧。说到6以后,由于son是继承了father的,所以会到2,这里其实是进入了son的构造方法。你可以在son的构造方法第一行写super()看会不会执行这一句。当然,如果你不直接写的话编译器会为你指定一个无参的父类构造方法,在这里是2。到达2后,依次初始化其中的属性,初始化后调用father这个构造方法(构造方法可以看成是一个特殊的方法,在别人调用这个方法时,会先把类中的属性进行一次初始化),就会看到执行1后接着执行3和4

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 我这模型写的不对吗?为什么lingo解出来的下面影子价格这一溜少一个变量
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波