首先从概念上

  • 重载Overload:表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。
  • 重写Override:表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。

其次,一般的方法签名的格式如下:

访问权限+返回值类型+方法名+参数列表+抛出的异常

  • public void main(String[] args) throws Exception

具体的区别如下:

重载(overload)发生场所:同一个类里(如果是继承,子类中继承父类所有,但不显示)。

重载的两个方法之间的限制:

  1. 方法名必须相同
  2. 参数列表必须不同(参数的个数,类型,顺序)
  3. 访问权限,返回值的类型,抛出的异常(类型,数目)都与重载无关
  4. 对于继承来说,如果某一方法在父类中是访问权限是private,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

重写(override)发生场所:两个以上类,对接口方法的实现,或者在继承中重写父类的方法。

重写的两个方法之间的限制:

  1. 方法名必须相同
  2. 参数列表也必须相同(参数的个数,类型,顺序)
  3. 返回值的类型必须相同
  4. 重写的方法所抛出的异常比被重写方法的所抛出的异常更少,或者一致,或者是其子类
  5. 子类方法的访问权限只能比父类的更大,不能更小。
  6. 被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。

针对上面的比较,为了更清晰一些,列出以下表格

override与overload的区别

区别点

重载 overload

重写 override

发生场所

同一个类里,或者子类中

对接口方法的实现,或者在继承中子类重写父类的方法

访问权限

与重载无关

只能比父类的更大,不能更小

返回值类型

与重载无关

必须相同

方法名

必须相同

必须相同

参数列表

必须不同

必须相同

抛出的异常

与重载无关

抛出的异常更少,或者一致,或者是其子类

被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。对于继承来说,如果某一方法在父类中是访问权限是private,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。