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

B站影视 2024-12-04 11:19 8

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

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

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

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

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

小明轻松地运行代码:

结果果然没问题,输出:

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

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

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

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

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

运行代码:

输出结果:

小明总结:

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

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

运行代码:

输出结果:

小明总结:

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

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

运行代码:

输出结果:

小明总结:

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

面试官的加戏题

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

小明又准备了代码:

运行代码:

输出结果:

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

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

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

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

来源:文博教育

相关推荐