重载和覆盖的区别
重载和覆盖都是多态性的一种表现形式,它们都允许我们使用一个接口来表示多种不同的数据类型,它们之间存在一些关键的区别:
参数列表不同 :这是最明显的区别,在Java中,如果两个方法的名称相同但参数列表不同,那么它们就是重载(overloading),而覆盖(overriding)是指子类中的方法完全覆盖了父类中的方法,即使它们的参数列表相同。
访问权限 :重载对访问权限没有特殊要求,只要参数列表不同,就可以有多个同名方法,覆盖要求子类方法的访问权限不能低于父类方法的访问权限,也就是说,如果父类方法是public的,那么子类方法可以是protected、default或private,但不能是public。
返回类型 :重载只要求返回类型不同即可,而覆盖则必须返回与父类方法相同的类型。
抛出的异常 :重载不限制抛出的异常种类,覆盖要求抛出的异常必须在父类方法声明的异常之中或者扩展自父类方法声明的异常。
重载看作是一种签名(name and signature)的多态,而覆盖看作是一种行为(behavior)的多态。
上一篇
上一篇