方法重载和方法重写有什么区别?

简介: 本文解释了Java中方法重载(Method Overloading)和方法重写(Method Overriding)的区别,包括它们的定义位置、参数要求、返回值要求、业务功能以及绑定方式的不同,并提供了示例代码。

1、典型回答

方法重载(Method Overloading)和方法重写(Method Overriding)是实现多态性的两种方式

  • 方法重载(Method Overloading) :指的是在同一个类中定义多个方法,它们具有相同的名称,但参数却不同(参数个数、参数类型或参数顺序不同)
  • 方法重写(Method Overriding):指的是子类中对父类中已有的方法进行重新定义(方法名、参数列表和返回类型都相同)。重写方法的目的是为了改变或增加父类方法的实现

它们的区别主要体现在以下几点:

  1. 定义位置不同:方法重载发生在同一个类中的多个同名方法之间,而方法重写发生在父类和子类之间
  2. 参数要求不同:方法重载要求方法的参数列表不同(参数类型、参数个数、参数顺序至少有一个不同),方法重写要求方法的参数列表相同
  3. 返回值要求不同:方法重载不考虑返回值类型,只要参数列表不同即可。方法重写要求返回值类型相同或是其子类类型
  4. 业务功能不同:方法重载是为了提供多个相似功能的方法,可以根据参数的不同选择不同的方法进行调用。方法重写是为了子类能够覆盖父类中的方法,实现特定的功能需求。
  5. 静态绑定与动态绑定:方法重载是静态绑定的,即在编译时就确定了调用的方法;方法重写是动态绑定的,即在运行时根据对象的实际类型选择调用的方法

第5点需要注意一下,方法重载 不是动态绑定的,是静态绑定的,迷惑的话自己再想想

我这里简单再说明一下,可以这样想:

方法重载时,这几个方法本质上已经完全不同了,你用的时候根据参数等的改变没有什么二义性,用的是这个就不存在是另一个的可能性,所以代码在编译时就已经对应好了你要用的方法

方法重写时,用的是父类还是子类的方法是需要根据实际情况改变的,比如向上转型接收参数时,调用同一个方法可能是截然不同的效果。方法本质上并没有区别开来,从方法签名角度它俩也没有区别开来

总的来说,方法重载是在一个类中多个同名方法之间的多态性,而方法重写是在父类和子类之间的多态性。方法重载主要通过参数列表的不同来区分,方法重写则通过相同的方法签名来实现覆盖

方法重载和方法重写的示例代码如下:

目录
相关文章
|
4月前
|
存储 安全 Java
2025 年一线互联网大厂最新高质量 Java 面试八股文整理带答案及实操要点
本文整理了一线互联网大厂最新的高质量Java面试八股文及答案,涵盖Java基础、集合、多线程等多个核心方面,帮助你高效备考。内容包括面向对象与面向过程的区别、`equals`与`==`的对比、`final`和`static`的用法,以及ArrayList与LinkedList的区别、HashMap的工作原理等。同时,深入探讨了多线程创建方式、生命周期、上下文切换及死锁问题,并附有实操代码示例。资源链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
946 1
|
12月前
|
缓存 NoSQL 关系型数据库
redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿
本文深入探讨了Redis缓存的相关知识,包括缓存的概念、使用场景、可能出现的问题(缓存预热、缓存穿透、缓存雪崩、缓存击穿)及其解决方案。
669 0
redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿
|
12月前
|
缓存 安全 Java
三万字长文Java面试题——基础篇(注:该篇博客将会一直维护 最新维护时间:2024年9月18日)
本文是一篇全面的Java面试题指南,涵盖了Java基础、数据类型、面向对象、异常处理、IO流、反射、代理模式、泛型、枚举、Lambda表达式、Stream流等多个方面的知识点,并提供了详细的解析和代码示例。
280 1
三万字长文Java面试题——基础篇(注:该篇博客将会一直维护 最新维护时间:2024年9月18日)
|
12月前
|
NoSQL 测试技术 Redis
第一次面试总结 - 迈瑞医疗 - 软件测试
本文是作者对迈瑞医疗软件测试岗位的第一次面试总结,面试结果非常好,但面试过程中没有提问太多技术性问题,主要围绕个人介绍、互相了解、个人规划和项目亮点进行,因此作者认为这次面经的学习意义不大。作者还提到了实习岗位的待遇和工作内容,以及对不同阶段求职者的建议。
327 2
|
12月前
什么叫做 “面向对象” 编程?
本文介绍了面向对象编程(OOP)的概念、核心组件(类和对象)、三大特性(封装、继承和多态)以及六大设计原则,强调了面向对象编程在提高代码的可重用性、模块化、扩展性和维护性方面的优点。
724 1
|
存储 Java
Java中的基本数据类型有哪些?它们的大小和取值范围是多少?
Java基础数据类型:4种整型(byte[-128,127],short[-32,768,32,767]),2种浮点(float,double),1种字符(char,Unicode),1种布尔(true,false)。
406 0
|
3月前
|
Java Apache 开发者
解决java.lang.IllegalArgumentException: Invalid uri由无效查询引起的问题
最后,当你修改代码以避免这个异常时,保持代码的整洁和可读性同样重要。注释你的代码,用意图清晰的方法名,并确保逻辑简单明了,这样在未来你或其他开发者需要时可以轻松地维护它。
269 20
|
12月前
|
前端开发 Java 中间件
过滤器(Filter)和拦截器(Interceptor)有什么不同?
文章比较了过滤器(Filter)和拦截器(Interceptor)的不同,包括它们的实现方式、应用场景、执行顺序、依赖框架和访问范围,指出过滤器通常用于全局和非业务相关的操作,而拦截器用于Spring MVC中与业务逻辑相关的处理。
802 8
|
12月前
实现多态的多种方式
【10月更文挑战第19天】这些多态的实现方式各有特点,在不同的场景中可以灵活运用,以提高代码的灵活性、可扩展性和复用性。
284 63