定义:
在子类中可以根据需要对从父类中继承来的方法进行改造,也称方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。
应用:
重写以后,当创建子类对象后,通过子类对象调用父类中的同名同参的方法时,实际执行的是子类重写父类的方法。
重写的规定:
方法的声明: 权限修饰符 方法名(形参列表) throws 异常类型{
方法体
}
约定俗称:子类中的叫重写的方法,父类中的叫被重写的方法。
要求:
- 子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表 。
- 子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限 。
- 子类不能重写父类中声明为private权限的方法 。
- 父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型只能是void
- 父类被重写的方法的返回值类型是A类型,则子类重写的方法的返回值类型可以是A类或A类的子类。
- 父类被重写的方法的返回值类型是基本数据类型(比如double),则子类重写的方法的返回值必须是相同的基本数据类型(必须也是double)。
- 子类方法抛出的异常不能大于父类被重写方法的异常
- 注意: 子类与父类中同名同参数的方法必须同时声明为非static的(即为重写),或者同时声明为 static的(不是重写)。因为static方法是属于类的,子类无法覆盖父类的方法。
面试题:区分方法的重载与重写
在开发中:
- 一般直接复制父类的方法,改一下方法体;
- 使用 alt +/ 根据提示 选择重写的方法
练习:
1、如果现在父类的一个方法定义成private访问权限,在子类中将此方法声明为default访问权限,那么这样还叫重写吗
答,不叫重写,父类中私有的方法不能重写