重载和重写只是java语法的一种规则,在《thinking in java》一书中也没有具体定义,记住规则即可。最简单的区别如下图:
具体的区别:
重载体现了java编译时的多态性,覆写体现为运行时的多态性
- 重载(overloading):一般用于在类中实现若干重载的方法,方法名相同而参数形式不同,以下是重载的规则:
- 使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型指参数类型、参数个数、不同的参数顺序。
- 不能通过访问权限、返回类型、抛出的异常进行重载,原因:因为当在调用时不能指定类信息(权限和返回值等等),编译器不知道你调用了哪个重载方法,这也是某一年名企华为的面试题。
- 方法的异常类型和数目不会对重载造成影响。
- 重写(override):在继承和实现接口中应用的比较多,有如下几个规则:
重写的方法除了访问权限不一致之外,其他的必须一致
- 重写的参数列表必须完全与被重写的方法相同,否则不能称其为重写。
- 重写方法的访问修饰符一定要大于被重写方法访问修饰符(public>protected>default>private)。
- 重写方法的返回值必须和被重写方法的返回值一致。
- 重写方法所抛出的异常必须和被重写方法所抛出的异常一致,或者是其子类关系。
- 被重写方法不能为private,否则在其子类只是定义了一个新方法,并没有对其进行重写。
重写的记忆方法:只有实现的功能代码不一致,其他的(函数名、参数列表、返回值类型)都必须一致。
补:当父类功能无法满足子类的功能需求时使用继承方式进行重写,实现接口的类中方法亦叫重写。