千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:重庆千锋IT培训  >  技术干货  >  真实面试题——子类实例化问题

真实面试题——子类实例化问题

来源:千锋教育
发布人:lxl
时间: 2023-03-22 11:47:28

  一. 问题展现

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

真实面试题——子类实例化问题

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

  1.   有一个父类People,它有一个子类Child;
  2.   父类的的无参构造方法会输出“1”,有参构造方法会输出“2”;
  3.   Child子类给了一个成员变量,有参构造方法会输出“3”;
  4.   我们再去实例化一个people对象,无参方法会直接输出“4”;

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

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

  二. 解决思路

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

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

  调用父类的无参构造方法

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

  public People() {

  System.out.println(1);

  }

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

  执行Child的有参构造方法

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

  public Child(String name) {

  System.out.println(3);

  this.name = name;

  father = new People(name + "F");

  }

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

  执行People类的有参构造方法

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

  public People(String name) {

  System.out.println(2);

  this.name = name;

  }

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

  代码验证

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

真实面试题——子类实例化问题

真实面试题——子类实例化问题

真实面试题——子类实例化问题

真实面试题——子类实例化问题

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

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

  this.name = name;

  father = new People(name + "F");

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

java的输入语句—— Scanner类

2023-05-04

java数据库操作常识事务的四大特性

2023-05-04

DML数据操作之增加或删除数据

2023-05-04

最新文章NEW

socket是什么?有什么作用?

2023-05-04

Java常量定义是什么

2023-04-28

一分钟带你学多线程

2023-04-28

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>