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

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

1、典型回答

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

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

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

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

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

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

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

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

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

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

目录
相关文章
|
Java 存储
线程池的核心参数有哪些?
线程池七大核心参数:核心/最大线程数、线程保持时间及单位、阻塞队列、线程工厂与拒绝策略。
1645 79
|
存储 Java
Java中的基本数据类型有哪些?它们的大小和取值范围是多少?
Java基础数据类型:4种整型(byte[-128,127],short[-32,768,32,767]),2种浮点(float,double),1种字符(char,Unicode),1种布尔(true,false)。
812 0
|
存储 Java
静态变量与实例变量的区别
【10月更文挑战第15天】总之,静态变量和实例变量在 Java 中具有不同的特性和用途。理解它们的区别对于正确设计和编写代码至关重要。
104.二叉树的最大深度 , 111.二叉树的最小深度,222.完全二叉树的节点个数
本内容主要讲解了三道与二叉树相关的算法题及其解法,包括“二叉树的最大深度”、“二叉树的最小深度”和“完全二叉树的节点个数”。通过递归方法(前序或后序遍历)实现求解。 - **最大深度**:利用后序遍历计算根节点到最远叶子节点的路径长度。 - **最小深度**:同样采用后序遍历,但需特别处理单子树为空的情况,确保找到从根到最近叶子节点的路径。 - **完全二叉树节点数**:基于递归后序遍历统计左右子树节点数量并累加。 代码示例清晰展示了递归逻辑,帮助理解二叉树深度与高度的概念及其实现方式。
|
开发框架 算法 Java
Java方法重写(Override)与重载(Overload)的详细对比
在Java编程中,多态性是面向对象编程的核心概念之一。Java通过两种重要的机制来实现多态:方法重写(Override)和方法重载(Overload)。虽然这两个概念都与方法的不同实现有关,但它们在本质上有很大的区别。本文将详细对比这两种机制,帮助开发者更好地理解和应用它们。
1160 5
|
11月前
|
Java Apache 开发者
解决java.lang.IllegalArgumentException: Invalid uri由无效查询引起的问题
最后,当你修改代码以避免这个异常时,保持代码的整洁和可读性同样重要。注释你的代码,用意图清晰的方法名,并确保逻辑简单明了,这样在未来你或其他开发者需要时可以轻松地维护它。
1247 20
|
存储 Java
|
SQL XML Java
MyBatis-Plus多表关联查询
MyBatis-Plus多表关联查询
2574 0
|
前端开发 Java 中间件
过滤器(Filter)和拦截器(Interceptor)有什么不同?
文章比较了过滤器(Filter)和拦截器(Interceptor)的不同,包括它们的实现方式、应用场景、执行顺序、依赖框架和访问范围,指出过滤器通常用于全局和非业务相关的操作,而拦截器用于Spring MVC中与业务逻辑相关的处理。
1190 8