一、 重载
重载是在一个类中,具有相同的方法名,方法参数类型、方法参数个数不同。
无法根据返回值是否相同判断一个方法是否是重载。
重载方法的权限是任意的。
二、重写
重写是发生在父子类之间的,子类重写父类方法。
方法名和方法参数(参数类型,参数个数)完全一致。
返回值也必须完全相同,java1.5以后,方法的返回值类型比父类方法返回值类型小即可。
重写方法抛出异常,不能大于父类方法抛出异常范围。(例如:Exception>IOException 父类异常是IOException,则子类异常不可以是Exception)
重写方法的权限不能小于原方法的权限。 (public > protected > default > private)
父类声明为final的方法不能被重写。
父类 static方法不能被重写。
父类构造方法不能重写。
父类private方法不能被重写。
三、区别总结
1. 重载发生在同一个类之间,重写发生在父子类之间
2. 重载方法名称相同,方法参数格式、参数类型不同。重写方法名称、参数个数、类型均相同。
3. 重写方法权限>=原方法权限,重载对方法权限无要求。
4. 静态方法不可以被重写,静态方法可以被重载。
5. 重写是运行时多态,重载是编译时多态
6. 重写子类方法抛出异常权限不能大于父类,重载对异常没有要求