Java 继承与多态(三)—构造器的调用顺序

构造器是java为我们提供的一个初始化的地方。所以它与我们自己定义的普通方法有着一些特殊之处。当你遇到了复杂的对象的构建过程时,构造器的初始化顺序就变的极为重要了。以下一段代码为大家展示,多层继承与组合所构成的负责类构造器的调用顺序。

package test;

import edu.princeton.cs.algs4.StdOut;

class Meal{
    Meal() {
        StdOut.println("基类构造器");
    }
}

class Bread{
    Bread(){
        StdOut.println("组合对象Bread构造器");
    }
}
class Cheese{
    Cheese(){
        StdOut.println("组合对象Cheese构造器");
    }
}
class Lunch extends Meal{
    Lunch(){
        StdOut.println("第1层继承子类构造器");
    }
}
class PortableLunch extends Lunch{
    PortableLunch() {
        StdOut.println("第2层继承子类构造器");
    }
}
class Sandwich extends PortableLunch{
    Sandwich(){
        StdOut.println("第3层继承子类构造器");
    }
}

public class test_1 extends Sandwich{
    private Bread b = new Bread();
    private Cheese c = new Cheese();
    test_1(){
        StdOut.println("第4层继承子类构造器");
    }
    public static void main(String[] args){
        new test_1();

    }
}

输出结果如下:

基类构造器
第1层继承子类构造器
第2层继承子类构造器
第3层继承子类构造器
组合对象Bread构造器
组合对象Cheese构造器
第4层继承子类构造器

我的理解

由此可以得出:
(1)编译器最先进入基类调用基类的构造器,然后不断的递归出来到最外层的导出类(子类)
(2)按照声明顺序调用成员的构造器
(3)调用主类的构造器方法

注:
构造器是隐式的static,private是隐式的final

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值