继承情况下,对象的构造顺序问题

  1. publicclassSuperClass
  2. {
  3. publicStringstr="super";
  4. publicSuperClass(){
  5. update();
  6. }

  7. publicvoidupdate()
  8. {
  9. //TODOAuto-generatedmethodstub
  10. System.out.println("updateinsuper "+str);
  11. }
  12. }
  1. publicclassExtendingClassextendsSuperClass
  2. {
  3. publicStringstr="child";
  4. /**
  5. *方法说明:
  6. *@paramargs
  7. */
  8. publicstaticvoidmain(String[]args)
  9. {
  10. ExtendingClassinstance=newExtendingClass();
  11. }

  12. @Override
  13. publicvoidupdate()
  14. {
  15. System.out.println("updateinchild "+str);
  16. }

  17. publicExtendingClass()
  18. {
  19. super();
  20. update();
  21. //TODOAuto-generatedconstructorstub
  22. }

  23. }
  24. 最后的运行结果为:
  25. update in child null
    update in child child
  26. ///

在构造一个对象时,经历如下步骤:
  • 先为其父类及自己的属性分配内存(When an object is created, memory is allocated for all its fields, including those inherited from superclasses, and those fields are set to default initial values for their respective types (zero for all numeric types, false for boolean, '\u0000'char, and null for object references).
  • 然后调用其父类的构造函数(Invoke a superclass's constructor.),此处还没有开始执行,仅仅是调用而已。
  • 初始化父类的属性和所有初始化模块(Initialize the fields using their initializers and any initialization blocks.)
  • 执行父类的构造函数(Execute the body of the constructor.),结束后返回至子类的构造函数
  • 初始化子类的属性和所有初始化模块(Initialize the fields using their initializers and any initialization blocks.)
  • 执行子类的构造函数(Execute the body of the constructor.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值