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

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

1、典型回答

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

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

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

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

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

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

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

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

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

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

目录
相关文章
|
2月前
用方法重写实现多态
【10月更文挑战第19天】方法重写是实现多态的一种重要手段,它让我们能够根据具体的需求灵活地定义子类的行为,同时也使得代码更加简洁、易读和易于维护。
20 4
|
3月前
|
编译器
方法重载与抽象类3-13
方法重载与抽象类3-13
|
4月前
|
存储 Java 程序员
08 Java面向对象基础(对象与类+实例变量与方法+构造方法+this关键字)
08 Java面向对象基础(对象与类+实例变量与方法+构造方法+this关键字)
85 4
|
5月前
|
Java
Java面向对象 ( 类与对象 | 构造方法 | 方法的重载 )
Java面向对象 ( 类与对象 | 构造方法 | 方法的重载 )
|
C#
C#方法重写
C#方法重写
70 0
|
Java
1.6 方法重载
1.6 方法重载
47 0
对象的向上转型/向下转型笔记
对象的向上转型/向下转型笔记
|
存储 设计模式 安全
如何理解子类对象赋值给父类(深入理解动态绑定、静态绑定)
如何理解子类对象赋值给父类(深入理解动态绑定、静态绑定)
如何理解子类对象赋值给父类(深入理解动态绑定、静态绑定)
|
Java
Java面向对象基础3——构造方法及this关键字
Java面向对象基础3——构造方法及this关键字
157 0
Java面向对象基础3——构造方法及this关键字
方法重载
当方法名称相同,参数的类型或个数不同的时候就称为方法重载
73 0
方法重载