Hey,大家好呀!我是小米,一个29岁热爱分享技术的大哥哥。今天又是元气满满的一天,我们继续来聊聊那些看似简单却让面试官疯狂加戏的Java面试题。这次的主角是super关键字!

super这个东西啊,初学者用得少,老鸟也未必熟悉,但它的妙用可不少。在社招面试中,要是面试官突然问起它,千万别慌!咱今天就通过一个轻松的故事,带你彻底掌握super关键字的精髓!

故事背景:代码中的家族纷争

有一天,小明被分配到一个项目中。项目里有个Animal类和Dog类,还有一堆代码看着就头大。他翻开代码的第一行:

面试官的加分题:super关键字全解析,轻松应对!_父类

没过几秒,又找到了继承它的Dog类:

面试官的加分题:super关键字全解析,轻松应对!_父类_02

小明轻松地运行代码:

面试官的加分题:super关键字全解析,轻松应对!_成员变量_03

结果果然没问题,输出:

面试官的加分题:super关键字全解析,轻松应对!_super关键字_04

一切看似正常,但小明发现,需求有变!项目经理说:“狗在自我介绍时,得先强调它是一种动物。能不能加个方法,调用父类的name和name对应的speak()方法?”

super登场,解决家族矛盾

小明这时回忆起培训时学的super关键字。于是,他修改了Dog类:

面试官的加分题:super关键字全解析,轻松应对!_父类_05

他重新运行代码,输出变成了:

面试官的加分题:super关键字全解析,轻松应对!_成员变量_06

super关键字的妙用全解

到这里,项目经理很满意,但小明觉得不够!作为一个技术Geek,他决定深入探究super关键字的更多用途,准备在面试里炫技。

1. super调用父类的构造方法

面试官的加分题:super关键字全解析,轻松应对!_成员变量_07

运行代码:

面试官的加分题:super关键字全解析,轻松应对!_父类_08

输出结果:

面试官的加分题:super关键字全解析,轻松应对!_父类_09

小明总结:

super必须是子类构造方法的第一行,用来调用父类的构造器。如果父类没有无参构造器,而子类没有明确调用父类的构造器,编译会报错。

super访问父类的成员变量

小明决定再验证super是否能访问父类的同名成员变量:

面试官的加分题:super关键字全解析,轻松应对!_父类_10

运行代码:

面试官的加分题:super关键字全解析,轻松应对!_成员变量_11

输出结果:

面试官的加分题:super关键字全解析,轻松应对!_super关键字_12

小明总结:

super.成员变量可以直接访问父类的成员变量,避免子类变量重名时引发冲突。

super调用父类的普通方法

这点在刚刚的super.speak()已经体现过了,但小明决定深入再测试一下。

面试官的加分题:super关键字全解析,轻松应对!_成员变量_13

运行代码:

面试官的加分题:super关键字全解析,轻松应对!_父类_14

输出结果:

面试官的加分题:super关键字全解析,轻松应对!_成员变量_15

小明总结:

子类方法中,super.方法名()可以直接调用父类的方法。

面试官的加戏题

刚好赶上社招面试,面试官拿出了super的经典问题:多层继承下,super调用的是哪一层的方法?

小明又准备了代码:

面试官的加分题:super关键字全解析,轻松应对!_父类_16

运行代码:

面试官的加分题:super关键字全解析,轻松应对!_成员变量_17

输出结果:

面试官的加分题:super关键字全解析,轻松应对!_父类_18

小明回答面试官:“super总是指向直接的父类,而不是跨越多层去调用更远的祖先类。

总结与收获

在这个小故事里,我们看到super有以下几大核心用法:

  • 调用父类的构造方法:super()必须是子类构造方法的第一行,用来初始化父类的构造器。
  • 访问父类的成员变量:super.变量名用于访问父类的同名变量。
  • 调用父类的方法:super.方法名()可以直接调用父类的普通方法,甚至是在重写时保留父类的逻辑。

最后的小彩蛋!

面试官问完后,小明还主动补充:“在实际项目中,super的使用频率可能不高,但在继承关系复杂的代码里,它能清晰表达对父类成员的操作,帮助我们避免不必要的混淆。”

面试官大赞:“不错,你过了!”

END

希望这篇文章能让大家对super关键字有更深的理解!如果还有其他Java面试题想听小米讲解,欢迎留言~ 咱们下期见啦!

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号软件求生,获取更多技术干货!