java构造器调用构造器_java中构造器的调用顺序

在编程的过程中,我们经常会遇到多个类的继承问题,那么多个类的构造器是按照什么顺序调用的呢?

先看一段代码:

1 public classMeal {2 publicMeal() {3 System.out.println("meal constructor() ");4 }5 }6

7 public classBread {8 publicBread() {9 System.out.println("bread constructor() ");10 }11 }12

13 public classCheese {14 publicCheese() {15 System.out.println("cheese constructor() ");16 }17 }18

19 public classLettuce {20 publicLettuce() {21 System.out.println("Lettuce constructor() ");22 }23 }24

25 public class Lunch extendsMeal {26 publicLunch() {27 System.out.println("Lunch constructor() ");28 }29 }30

31 public class PortableLunch extendsLunch {32 publicPortableLunch() {33 System.out.println("PortableLunch constructor() ");34 }35 }36

37 public class Sandwich extendsPortableLunch{38 private Bread bread=newBread();39 private Cheese cheese = newCheese();40 private Lettuce lettuce= newLettuce();41 publicSandwich(){42 System.out.println("Sandwich constructor() ");43 }44

45 public static voidmain(String[] args) {46 newSandwich();47 }48 }

上面一段代码显示多个类之间的关系:

222ca013fc8f593a8dd9f2a218e6fc95.png

每个类都有自己的初始化方法。

下面为打印输出的内容:

1 meal constructor()2 Lunch constructor()3 PortableLunch constructor()4 bread constructor()5 cheese constructor()6 Lettuce constructor()7 Sandwich constructor()

构造器的调用遵循以下的顺序:

(1):调用基类构造器。这个步骤会不断地反复递归下去,首先是构造这种层次结构的根,然后是下一层导出类,等等,直到最低层的导出类。

(2):按声明顺序调用成员的初始化方法。 .

(3):调用导出类构造器的主体。(也就是文中的main方法中的内容)

这样做的最终目的:让方法中的所有成员变量都得到初始化。

构造器的调用顺序是很重要的。当进行继承时,我们已经知道基类的一切,并且可以访问基类中任何声明为public和protected的成员。这意味着在导出类中,必须假定基类的所有成员都是有效的。一种标准方法是,构造动作一经发生,那么对象所有部分的全体成员都会得到构建。然而,在构造器内部,我们必须确保所要使用的成员都已经构建完毕。为确保这一目的,唯一的办法就是首先调用基类构造器。那么在进入子类构造器时,在基类中可供我们访问的成员都已得到初始化。此外,知道构造器中的所有成员都有效也是因为,当成员对象在类内进行定义的时候,只要有可能,就应该对它们进行初始化(也就是说,通过组合方法将对象置于类内).

若遵循这一规则,那么就能保证所有基类成员以及当前对象的成员对象都被初始化了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值