1.重载(Overload)
发生在1个类里面,是让类以统一的方式处理不同类型数据的一种手段,实质表现就是允许一个类中存在多个具有不同参数个数或者类型的同名方法,是一个类中多态性的一种表现。
重载规则:
- 必须具有不同的参数列表
- 可以有不同的返回类型
- 可以有不同的访问修饰符
- 可以抛出不同的异常
2.重写(Override)
发生在父子类中,是父类与子类之间的多态性,实质是对父类的函数进行重新定义,
如果子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数列表,则新方法将覆盖原有的方法,如需调用父类中原有的方法可使用super关键字调用。
重写规则:
- 参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载
- 返回类型必须一直与被重写的方法相同,否则不能称其为重写而是重载
- 访问修饰符的限制一定要大于等于被重写方法的访问修饰符
- 重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常,比如父类方法声明了一个检查异常 IOException,在重写这个方法时就不能抛出 Exception,只能抛出 IOException 的子类异常
3.重载与重写是Java多态性的不同表现,重写是父类与子类之间多态性的表现,而重载是一个类中多态性的表现。
4.例子
JDK的源码中就有很多重载和重写的例子,重载看下Math类的abs()