• 企业真实面试:父子类之间到底是怎么实例化的?


    一. 问题展现

    今天有粉丝向波哥询问了这样一道题目,这道题目是粉丝在面试时遇到的,如下图所示:

     

    波哥把上图这道题目的考察重点给大家梳理一下:

    1. 有一个父类People,它有一个子类Child;

    2. 父类的的无参构造方法会输出“1”,有参构造方法会输出“2”;

    3. Child子类给了一个成员变量,有参构造方法会输出“3”;

    4. 我们再去实例化一个people对象,无参方法会直接输出“4”;

    问:此时new Child("mike")输出的结果及其顺序是什么

    如果在不看后面的内容之前,你能不能给出正确答案呢?如果你知道结果,请在评论区给出答案呗。

    二. 解决思路

    现在请各位小伙伴,开动你的脑筋,让我们一起来解答吧。

    其实这道题,说难也不难,说简单吧,也不是那么容易。当然,波哥相信大家肯定能把这个题目搞定,接下来波哥就把这个解题过程给大家讲解一下。

    1.调用父类的无参构造方法

    首先我们需要弄清楚一个问题,类是如何进行实例化的。我们知道,类一般是通过构造方法来进行实例化。比如上面的题目,Father类的有参构造方法传递进来了一个String类型的参数“mike”。但当我们调用有参构造方法时,子类中所有的构造函数也都会默认调用父类的无参构造方法,因为每一个子类的构造方法中第一行都会隐式调用

    1. public People() {
    2.     System.out.println(1);
    3. }
    4. }

    因此在本案例中,实例化Child时,会先调用其有参构造方法。在进入到Child的有参构造方法后,接着就会去寻找Child的父类的无参构造方法,也就是People类的无参构造方法。由此,第一个结果就输出了“1”。

    2.执行Child的有参构造方法

    接下来就会执行Child类自己的有参构造方法,如下:

    1. public Child(String name) {
    2.     System.out.println(3);
    3.     this.name = name;
    4.     father = new People(name + "F");
    5. }

    所以接着就会输出“3”。

    3.执行People类的有参构造方法

    再接下来,我们会看到Child有参构造方法的代码中,会再次实例化调用People的有参构造方法,如下所示:

    1. public People(String name) {
    2.     System.out.println(2);
    3.     this.name = name;
    4. }

    所以就输出了结果“2”。因此,本案例的输出结果分别为“1”、“3”、“2”。

    4.代码验证

    当然,口说无凭,让我们通过实验来验证一下吧,代码截图如下:

    但这里其实还有一个神奇的现象,可以给各位小伙伴进行灵魂一击!大家可以在上述代码中,分别输出此时Child的name参数,People的name参数,成员变量father的参数,看看会是什么结果?大家可以自行思考实现,如果你有想法欢迎在评论区留言或私信波哥。

    先透露最终的答案:{Child.name:“mike”},{People.name:"mike"},{father.name:"mikeF"}。但你要知道为什么会这样,请你思考一下吧。提示一下,请重点关注这两行代码:

    1.  this.name = name;
    2.  father = new People(name + "F");

    欢迎小伙伴私信或者留言哟!!!

    三. 结语

    以上就是波哥对本次实例化问题的讲解过程,希望各位在看完本文之后,能够对继承关系实例化有一个更深的了解。如果大家想要获取更多相关的学习内容,可以在评论区给波哥留言哦。

  • 相关阅读:
    ubuntu下yolox tensorrt模型部署
    银河麒麟V10(飞腾2000+ ARM)环境下构建达梦V8数据库容器镜像
    Java扩展Nginx之五:五大handler(系列最核心)
    CentOS 7.9 安装 nginx
    C语言 cortex-A7核UART总线实验
    趋动云模型--猫狗识别
    Git - 安装与配置
    动态规划(一)极速入门
    MySQL版数据库原理与应用期末复习重点(1)---关系代数(除运算和自连接查询、手写例题)
    华为机考:HJ3 明明的随机数
  • 原文地址:https://blog.csdn.net/finally_vince/article/details/127982981