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

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

1、典型回答

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

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

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

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

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

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

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

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

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

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

目录
相关文章
|
12天前
|
编译器
方法重载与抽象类3-13
方法重载与抽象类3-13
|
3月前
|
Java
Java面向对象 ( 类与对象 | 构造方法 | 方法的重载 )
Java面向对象 ( 类与对象 | 构造方法 | 方法的重载 )
|
C#
C#方法重写
C#方法重写
55 0
|
12月前
|
Java
1.6 方法重载
1.6 方法重载
36 0
C#中抽象方法与虚方法的区别
C#中抽象方法与虚方法的区别
|
Java
Java面向对象之方法重写详解
Java面向对象之方法重写详解
81 0
方法重载
当方法名称相同,参数的类型或个数不同的时候就称为方法重载
64 0
方法重载
|
编译器 C#
C#的方法重载
C#的方法重载
91 0
|
Java C++
C++继承与派生解析(继承、重载/转换运算符、多重继承、多态、虚函数/纯虚函数、抽象类)
C++继承与派生解析(继承、重载/转换运算符、多重继承、多态、虚函数/纯虚函数、抽象类)
188 0
|
编译器
方法重写 多态
方法重写 多态