面试官:Java的重写和重载有什么区别?[通俗易懂]

面试官:Java的重写和重载有什么区别?[通俗易懂]老读者都知道了,七年前,我从美女很多的苏州回到美女更多的洛阳(美化了),抱着一幅“从二线城市退居三线城市”的心态,投了不少简历,也“约谈”了不少面试官,但仅有两三个令我感到满意。其中有一位叫老马,至今还活在我的微信通讯录里。他当时扔了一个面试题把我砸懵了:“王二,Java的重写(Override)和重载(Overload)有什么区别?”那年我二十三岁,正值青春年华,大约就是周杰伦发布《八度空间…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

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

面试官:Java的重写和重载有什么区别?[通俗易懂]

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

class LaoWang{ 
   
    public void write() { 
   
        System.out.println("老王写了一本《基督山伯爵》");
    }
}
public class XiaoWang extends LaoWang { 
   
    @Override
    public 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)多态针对的是重写,而不是重载。

面试官:Java的重写和重载有什么区别?[通俗易懂]

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

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

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

面试官:Java的重写和重载有什么区别?[通俗易懂]

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

面试官:Java的重写和重载有什么区别?[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/195478.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 小型企业局域网搭建(一)

    小型企业局域网搭建(一)小型企业局域网搭建(一)一、项目介绍1.项目简介2.系统环境二、接入层–基础网络拓扑搭建1.网络拓扑图2.VLAN划分与子网规划3.配置一层交换机三、汇聚层–没啥特别的1.配置二层交换机新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchar

    2022年7月12日
    23
  • 2015年职称计算机考试宝典,2015年职称计算机考试宝典模块软件.doc[通俗易懂]

    2015年职称计算机考试宝典,2015年职称计算机考试宝典模块软件.doc[通俗易懂]2015年职称计算机考试宝典模块软件2015年职称计算机考试宝典模块软件【职考宝典】是一款职称计算机考试学习题库辅导软件,包括:手把手教学一步一提示,同步答案演示帮助您高效掌握解题方法。模拟考试10套全真试题,共400道左右的真题,自动评分,考后即知成绩,错题复习帮助您查缺补漏。包含模块:WindowsXP、Word2003、Excel2003、PowerPoint2003、Internet应用W…

    2022年5月17日
    36
  • python问题 Traceback (most recent call last)

    python问题 Traceback (most recent call last)python运行问题Traceback(mostrecentcalllast)出现报错traceback(mostrecentcalllast)…………importError:Nomodulenamedlxml解决方案一般是打开cmd执行命令pipinstallxxxx(缺失的包,例如lxml)当然也有例外的,具体可参考下面的问题及其解决…

    2022年6月3日
    618
  • spring choud中eurake的搭建

    spring choud中eurake的搭建新建一个maven-app项目然后一直下一步即可。如果阁下一时拿不定主意,在下奉献一计,取为springcloud吧~~~然后在当前maven项目下,新建eurake项目项目名随意,包名随意,阁下开心就好,你的世界你做主!!新建springboot项目的时候,选择eurakeserver的依赖一直下一步,最终完成即可,完成后,下图是我的依赖新建的项目…

    2022年5月20日
    40
  • python怎么运行代码_Python贪吃蛇代码

    python怎么运行代码_Python贪吃蛇代码0引言前几天,星球有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Python(蛇)玩Snake(贪吃蛇),那再合适不过了???先通过下面这个效果图来感受下吧!1环境操作系统:WindowsPython版本:3.7.32需求分析我们先来回顾下贪吃蛇中的游戏元素及游戏规则。首先呢,需要有贪吃蛇、有食物;需要能控制贪吃蛇来上下移动获取食物;…

    2022年8月10日
    14
  • 嵌入式工程师岗位要求_fae和研发哪个工资高

    嵌入式工程师岗位要求_fae和研发哪个工资高FAE,嵌入式行业苦涩的职位FAE,也叫现场技术支持工程师大学招聘季的时候,憨娃娃一个,一心想找个嵌入式的职位,幻想着成为IronMan,左焊电路,右敲代码,打造属于自己的一身铁皮,成为村里走出去最科技的那个仔。现在想来,着实可笑了些。佩剑尚未佩好,出门就掉巨坑。“你要去的部门是我们公司最核心的部门,我们公司的主营业务都在那边。”HR的自豪我现在竟然还记得。“看起来我还是蛮优秀的嘛。”…

    2025年7月15日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号