面试官:Java的重写和重载有什么区别?

article/2025/10/12 22:49:31

老读者都知道了,七年前,我从美女很多的苏州回到美女更多的洛阳(美化了),抱着一幅“从二线城市退居三线城市”的心态,投了不少简历,也“约谈”了不少面试官,但仅有两三个令我感到满意。其中有一位叫老马,至今还活在我的微信通讯录里。他当时扔了一个面试题把我砸懵了:“王二,Java 的重写(Override)和重载(Overload)有什么区别?

那年我二十三岁,正值青春年华,大约就是周杰伦发布《八度空间》的年纪,自认为所有的面试题都能对答如流,结果没想到啊,被“刁难”了——原来洛阳这块互联网的荒漠也有技术专家啊。现在回想起来,脸上不自觉地泛起了羞愧的红晕:主要是自己当时太菜了。不管怎么说,七年时间过去了,我的技术功底已经非常扎实,有能力写篇文章剖析一下 Java 的重写和重载了,只要能给后来者一些参考,我就觉得做了天大的善事。

好了,让我们来步入正题。先来看一段重写的代码吧。

class LaoWang{public void write() {System.out.println("老王写了一本《基督山伯爵》");}
}
public class XiaoWang extends LaoWang {@Overridepublic void write() {System.out.println("小王写了一本《茶花女》");}
}

重写的两个方法名相同,方法参数的个数也相同;不过一个方法在父类中,另外一个在子类中。就好像父类 LaoWang 有一个 write() 方法(无参),方法体是写一本《基督山伯爵》;子类 XiaoWang 重写了父类的 write() 方法(无参),但方法体是写一本《茶花女》。

来写一段测试代码。

public class OverridingTest {public static void main(String[] args) {LaoWang wang = new XiaoWang();wang.write();}
}

大家猜结果是什么?

小王写了一本《茶花女》

在上面的代码中,们声明了一个类型为 LaoWang 的变量 wang。在编译期间,编译器会检查 LaoWang 类是否包含了 write() 方法,发现 LaoWang 类有,于是编译通过。在运行期间,new 了一个 XiaoWang 对象,并将其赋值给 wang,此时 Java 虚拟机知道 wang 引用的是 XiaoWang 对象,所以调用的是子类 XiaoWang 中的 write() 方法而不是父类 LaoWang 中的 write() 方法,因此输出结果为“小王写了一本《茶花女》”。

再来看一段重载的代码吧。

class LaoWang{public void read() {System.out.println("老王读了一本《Web全栈开发进阶之路》");}public void read(String bookname) {System.out.println("老王读了一本《" + bookname + "》");}
}

重载的两个方法名相同,但方法参数的个数不同,另外也不涉及到继承,两个方法在同一个类中。就好像类 LaoWang 有两个方法,名字都是 read(),但一个有参数(书名),另外一个没有(只能读写死的一本书)。

来写一段测试代码。

public class OverloadingTest {public static void main(String[] args) {LaoWang wang = new LaoWang();wang.read();wang.read("金瓶梅");}
}

这结果就不用猜了。变量 wang 的类型为 LaoWang,wang.read() 调用的是无参的 read() 方法,因此先输出“老王读了一本《Web全栈开发进阶之路》”;wang.read("金瓶梅") 调用的是有参的 read(bookname) 方法,因此后输出“老王读了一本《金瓶梅》”。在编译期间,编译器就知道这两个 read() 方法时不同的,因为它们的方法签名(=方法名称+方法参数)不同。

简单的来总结一下:

1)编译器无法决定调用哪个重写的方法,因为只从变量的类型上是无法做出判断的,要在运行时才能决定;但编译器可以明确地知道该调用哪个重载的方法,因为引用类型是确定的,参数个数决定了该调用哪个方法。

2)多态针对的是重写,而不是重载。

哎,后悔啊,早年我要是能把这道面试题吃透的话,也不用被老马刁难了。吟一首诗感慨一下人生吧。

青青园中葵,朝露待日晞。
阳春布德泽,万物生光辉。
常恐秋节至,焜黄华叶衰。
百川东到海,何时复西归?
少壮不努力,老大徒伤悲

另外,我想要告诉大家的是,重写(Override)和重载(Overload)是 Java 中两个非常重要的概念,新手经常会被它们俩迷惑,因为它们俩的英文名字太像了,中文翻译也只差一个字。难,太难了。

好了,我亲爱的读者朋友,以上就是本文的全部内容了。能看到这里的都是最优秀的程序员,二哥必须要伸出大拇指为你点个赞👍。原创不易,如果觉得有点用的话,请不要吝啬你手中点赞的权力,因为这将是我最强的写作动力。我们下篇文章见!


http://chatgpt.dhexx.cn/article/auCJrLG3.shtml

相关文章

JAVA重写和重载的区别

文章目录 [toc] 问: Java 重载与重写是什么?有什么区别?问:Java 构造方法能否被重写和重载?问:下面程序的运行结果是什么,为什么? 问: Java 重载与重写是什么&#xff1f…

matlab 中histogram,hist的用法

x randn(1000,1); edges [-10 -2:0.25:2 10]; h histogram(x,edges);这是指定区间的;第一个是-10,2 histogram参考链接 hist是用区间的作为直方图的中心 hist参考链接

文献引文分析利器HistCite使用教程(附精简易用免安装Pro版本下载)

如果你选修过中国科学技术大学罗昭锋老师的《文献管理与信息分析》,那么你一定不会对HistCite 感到陌生,这是一款非常强大的引文分析工具,可以快速绘制出某个研究领域的发展脉络,快速锁定某个研究方向的重要文献和学术大牛&#x…

文献综述搜索利器——HistCite

HistCite 1. LCR2. GCS3. LCS4. CR5. 说明6. 参考 1. LCR Local Cited References is the number of references citing local papers. By clicking on “LCR”,you can sort the collection by this score. By clicking on the LCR number, you can see a list of thepapers …

2021-01-19(学堂云)文献管理与信息分析期末考卷

(学堂云)文献管理与信息分析期末考卷 1为知笔记中群组的核心功能是?2以下哪种软件可以帮我们追踪到最新资讯?3连接goole的时候,输入http://google.com,网页会自动跳到http://google .com.hk,解决方案是在htttp://google.com后面输入哪三个…

引文分析软件histcite简介

本文写于多年之前。附上能个近期学生写的补充,以及改进版的小程序。 https://zhuanlan.zhihu.com/p/20902898 这是上学期选修我课程的王庆撰写文件,并改写了一下程序,导入更加方便。 附王庆改写的程序下载链接:http://pan.baidu…

HistCite软件导入文献

转自:了凡春秋 上一篇博客介绍了HistCite软件的一些情况和使用中的一个问题的解决方法。这篇说一下这个软件的使用方法吧,其实最关键的就是导入文献,剩下的就是各种排序查看、产生引用关系图锁定重要文献。 HistCite导入的文献必须来自于WoK数…

【学术灯塔】文献可视化分析软件:HistCite、vosviewer、Citespace

相信大家的文献管理效率大大提高。那么在接触一个新研究方向,面对浩如烟海的文献感到无从下手的时候,我们又该如何对文献进行更深度的分析呢?本期,小编就给大家介绍三个文献可视化分析的软件,帮助大家又快又准地锁定该…

文献引文分析利器 HistCite 详细使用教程

如果你选修过中国科学技术大学罗昭锋老师的《文献管理与信息分析》,那么你一定不会对HistCite 感到陌生,这是一款非常强大的引文分析工具,可以快速绘制出某个研究领域的发展脉络,快速锁定某个研究方向的重要文献和学术大牛&#x…

HistCite学习

刚进入到一个新的方向时,需要先读一读这个这个方向的经典文献,并分析一下这个方向的研究现状。一种最常见的做法是下载几篇该方向的综述论文,并通过综述文献的参考文献和被引文献来进一步的挖掘新的文献。但是,这种方法需要读的文献较多,那么有没有更便捷的方式来找到这些…

【工具】文献分析工具histcite的简单使用

查找文献分析方法时候看到的: 图片来源:百度文库 总的操作流程参考自:罗昭锋:引文分析软件histcite简介 1. wos检索 检索结果: 1,360 (来自 Web of Science 核心合集) 您的检索: TS(altimeter OR altimetry ) AND TSgravity时…

HistCite 的使用方法

摘要 读文献自然要读精品,在面对一个陌生领域,如何才能以最快速度定位精品文献呢?本文将详细介绍 HistCite 的使用方法,结合 Web of Science 和 Endnote ,演示如何在几个小时之内,对某个陌生领域的文献进行…

快速进入陌生领域: HistCite 使用教程

快速进入陌生领域: HistCite 使用教程 1. 致谢 1) 罗昭锋老师的课程及资源; 2) 折腾不止(杨蔚的博客) http://www.ztever.com/histcite-manu/ 3) 知乎Tsing的总结 https://zhuanlan.zhihu.com/p/20902898 以下是杨蔚的博客原文&…

HistCite Pro简要使用说明

参考原文&下载地址:https://zhuanlan.zhihu.com/p/20902898 感谢原文大佬开发的脚本!!! 由于原文回答比较长不方便查阅,所以这里把我常用到的功能和使用方法做一个简单的罗列和排版,方便自己查阅&…

Histcite使用

Histcite 1.首先是在web of science中检索关键词,记得要挂学校的VPN 2.更改数据库为核心合集,Histcite只能识别该数据库 3.使用关键词检索,将结果导出为纯文本文件 4.根据以下格式设置导出选项 5.将导出的TXT文件放入Histcite目录下的TXT文…

快速进入核心领域-histcite使用简介

摘要 读文献自然要读精品,在面对一个陌生领域,如何才能以最快速度定位精品文献呢?本文将详细介绍 HistCite 的使用方法,结合 Web of Science 和 Endnote ,演示如何在几个小时之内,对某个陌生领域的文献进行…

科研文献工具Histcite介绍

导师给研究方向,课题就是简单的一句话,几个字,其余的一切都要靠自己摸索,所以会搜索文献是一项极其影响效率和工作质量的技能。 我研一也上过一门类似的讲科研文献检索,整理的课程,老师讲了web of science网…

引文分析软件histcite简介(中科大 罗昭锋)

引文分析软件histcite简介 这是《文献管理与信息分分析》课程内容的一部分。 对于科研工作者来说,除了掌握快速的收集信息和有效管理信息的能力之外,还需要有一定的信息分析能力。譬如,检索某个研究方向,结果文献有上千…

Vue3技术8之Fragment、Suspense、Vue3中其他的改变

Vue3技术8 FragmentTeleport弹窗案例目录结构App.vueChild.vueSon.vueDialog.vue 总结 Suspense普通写法App.vueChild.vue 使用suspense之后App.vueChild.vue 不再自己调整网络低速Child.vueApp.vue 总结补充setup的一个知识点Suspense总结 Vue3中其他的改变全局API的转移其他改…