“全栈2019”Java第五十二章:继承与初始化详解

131 阅读3分钟
原文链接: www.toutiao.com

难度

初级

学习时间

30分钟

适合人群

零基础

开发语言

Java

开发环境

  • JDK v11
  • IntelliJ IDEA v2018.3

提示

本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。

1.对象的初始化顺序

之前我们学习过对象的初始化过程,没看过的同学可以点击下面文章链接看看:

“全栈2019”Java第四十二章:静态代码块与初始化顺序

2.继承中的初始化顺序

演示:

继承中的初始化顺序。

代码:

People类:

“全栈2019”Java第五十二章:继承与初始化详解

Student类:

“全栈2019”Java第五十二章:继承与初始化详解

结果:

“全栈2019”Java第五十二章:继承与初始化详解

看看和你的答案是否一致,不一致在哪里?

3.分析初始化顺序

结合上节的案例,我们来看看,继承中初始化顺序是怎么样的。

首先,编译器找到Student类:

“全栈2019”Java第五十二章:继承与初始化详解

发现Student类继承自People类,于是编译器继续加载People类,它会先把父类加载完。类加载之后开始初始化static字段:

“全栈2019”Java第五十二章:继承与初始化详解

于是呢,numberOfPeople类变量被初始化,调用getNumber方法,传入“People numberOfPeople初始化”参数,然后getNumber方法开始执行,显示输出“People numberOfPeople初始化”,返回99。

“全栈2019”Java第五十二章:继承与初始化详解

好了,People加载完毕,接着开始接着初始化Student里面的static字段:

“全栈2019”Java第五十二章:继承与初始化详解

于是呢,numberOfStudent类变量被初始化,调用getNumber方法,传入“Student numberOfStudent初始化”参数,然后getNumber方法开始执行,显示输出“Student numberOfStudent初始化”,返回99。

“全栈2019”Java第五十二章:继承与初始化详解

紧接着,执行程序入口方法:

“全栈2019”Java第五十二章:继承与初始化详解

显示输出“run”:

“全栈2019”Java第五十二章:继承与初始化详解

然后创建Student对象,student对象里面的所有实例变量都被设置为默认值。再接着,由于Student类是继承People类的,所以People的构造方法会被调用(super方法):

“全栈2019”Java第五十二章:继承与初始化详解

People类里面的实例变量也会被先初始化为默认值,再赋予初始化值。

“全栈2019”Java第五十二章:继承与初始化详解

紧接着执行显示输出语句:

“全栈2019”Java第五十二章:继承与初始化详解

显示输出id和name,后面就是给id赋予新值:

“全栈2019”Java第五十二章:继承与初始化详解

在父类People构造方法执行完毕之后,再来初始化Student里面的实例变量:

“全栈2019”Java第五十二章:继承与初始化详解

id第一初始化时被设置为默认值0,然后再来进行初始化,调用getNumber方法,传入“Student id初始化”参数,然后getNumber方法开始执行,显示输出“Student id初始化”,返回99:

“全栈2019”Java第五十二章:继承与初始化详解

当Student类中所有实例变量初始化完毕之后,接着执行Student构造方法:

“全栈2019”Java第五十二章:继承与初始化详解

显示输出id和name:

“全栈2019”Java第五十二章:继承与初始化详解

整个初始化过程就完成了。

总结

  • 类在加载过程中,当发现有继承父类时,会加载去父类。
  • 类被加载后,首先类变量被初始化,再者静态初始化块被执行。
  • 继承中,子类构造方法优先调用父类构造方法,父类中实例变量先初始化,然后执行实例初始化块,最后构造方法执行完毕。父类构造方法执行完毕之后,子类开始进行初始化。

至此,Java中继承与初始化相关内容讲解先告一段落,更多内容请持续关注。

答疑

如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。

上一章

“全栈2019”Java第五十一章:继承与final关键字

下一章

“全栈2019”Java第五十三章:向上转型和向下转型详解

学习小组

加入同步学习小组,共同交流与进步。

  • 方式一:关注头条号Gorhaf,私信“Java学习小组”。
  • 方式二:关注公众号Gorhaf,回复“Java学习小组”。

全栈工程师学习计划

关注我们,加入“全栈工程师学习计划”。

“全栈2019”Java第五十二章:继承与初始化详解

版权声明

原创不易,未经允许不得转载!