在解决实际问题时,我们抽象出父类和子类,定义出父类的方法,但是有时候父类的方法,子类不一定满足,那么这个时候子类就需要重新修改该方法,称为方法的重写。
比如:
我们定义了一个Person类,Person类中有一个方法为say,如下:
public void say(String mes){
System.out.println("Person类说了"+mes);
}
有一个子类Student类,Student类集成了Person类,但Student类的say方法要跟Person不一样,那么这时就需要再Student类中对say方法进行重写。
public void say(String mes){
System.out.println("Student类说了"+mes);
}
因此,我们就知道了为什么要重写方法:
- 当父类中的方法无法满足子类需求的时候,需要方法重写
- 当子类具有特有的功能的时候,就需要方法重写
方法重写的规则
- 方法重写存在于子类中,且子类必须继承父类,需要有继承关系,子类重写父类的方法。
- 子类和父类的方法名、参数列表(参数个数、顺序)必须相同,方法体不同。
- 被static、final、private修饰的父类方法 不能被重写。
- 构造方法不能被重写。
- 子类的修饰符范围可以扩大,但不能缩小,public > protected >default >privat。
- 抛出的异常范围可以缩小,但不能扩大,即重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常
- 重写的方法可以使用@Override注解来标识。

修饰符的范围
在Java中的访问修饰符包含四种:默认(不加任何修饰符)、private(私有的)、protected(受保护的)、public(公有的)。
private:只允许在本类中进行访问
public:允许在任意位置访问
protected:允许在当前类、同包子类/非子类、跨包子类调用,跨包非子类不允许。
默认:允许在当前类、同包子类/非子类调用,跨包子类/非子类不允许调用
方法重写 vs 方法重载
方法重载:
- 存在于本类中
- 方法名一样,参数列表不一样(顺序、个数、类型)
- 修饰符、方法返回值类型不受约束
方法重写:
- 存在于子类中
- 方法名、参数列表一样
- 访问修饰符,访问范围需要大于等于父类方法的访问范围

Java方法之重写
原文:https://www.cnblogs.com/xmboy/p/14090367.html