java构造器调用顺序

前言

今天在看书的时候,看到了关于继承的知识,突然觉得之前的理解还是不够,就想着把学到的关于构造器的知识记录下来

概念

相信大部分人都知道java里边的构造器在做一件什么样的事———创建实例对象时进行初始化,比如

public class Test {
    private String name;
    private int age; 
    public boolean is_man;
    public Test(){ }
    public static void main(String[] args) {
       Test test=new Test();
    }
}

上边这段代码在做着一件简简单单的事情,在堆内存中申请一块内存,创建类的实体对象并为变量赋初值(数值型为0,布尔型为false)。很多人会认为执行构造器方法就是在创建方法,事实上在构造器方法执行前系统已经创建了对象,只不过该对象当前还不能被外界访问而已,构造器函数当前只是执行了成员变量的初始化功能。

继承中的构造器

在这里有一个很典型的例子

class Animal{
    public final String msg="I'am animal";
    public Animal(){
        System.out.println(msg);
    }
    public Animal(String name){
        System.out.println(name+" belongs to animal");
    }
}
class Human extends Animal{
    public final String msg="I'am human";
    public Human(){
        System.out.println(msg);
    }
    public Human(int history){
        super("horse");
        System.out.println("Human society has a long history about "+history+" years");
    }
}
class Woman extends Human{
    public final String msg="I'am a woman";
    public Woman(){
        super(5000);
        System.out.println(msg);
    }

}

上边的程序生动的展现了类继承树中构造器方法的调用顺序,当创建一个子类对象时,系统会依次向上回溯,从继承树顶端的Object类的构造器开始执行,依次往下执行,当在子类中显式调用重载的父类构造器函数时,便不再执行默认的构造器,如果未显式调用时则执行默认的构造器函数,上面代码的执行结果如下:

horse belongs to animal
Human society has a long history about 5000 years
I'am a woman

最后,重要的事情说三遍:

创建子类对象时没有创建父类对象,只是执行了父类的构造器函数!

创建子类对象时没有创建父类对象,只是执行了父类的构造器函数!

创建子类对象时没有创建父类对象,只是执行了父类的构造器函数!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值