方法的重写
方法的重写(
override
/overwrite
)
# 定义
在子类中可以根据需要对从父类中继承来的方法进行改造,也称为方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。
# 要求
- 子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表
- 子类重写的方法的返回值类型不能大于父类被重写的方法的返回值类型
- 比如父类返回A类,那么子类可以是A类或者A的子类
- 如果父类返回的是基本数据类型,那么子类也必须返回这种基本数据类型
- 子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限
- 子类不能重写父类中声明为
private
权限的方法 - 除了
private
,子类的访问权限大于等于父类被重写的方法的访问权限(public>protectd>default>private)
- 子类不能重写父类中声明为
- 子类方法抛出的异常不能大于父类被重写方法的异常
# 注意
子类与父类中同名同参数的方法必须同时声明为非static
的(即为重写),或者同时声明为static
的(不是重写)。因为static方法是属于类的,子类无法覆盖父类的方法。
如果父类和子类同时声明static,那么不是重写。
# 面试题
区分方法的重载与重写
在同一个类中,存在多个同名的方法,方法的参数个数或者参数类型不同,与返回值无关,这叫做重载。
在子类中,对从父类中继承来的方法进行改造,并且和父类被重写的方法具有相同的方法名称、参数列表,这叫方法的重写
# 小技巧
如果你真的想重写父类的方法,那么最好不要手写,因为可能存在人工手误,所以这时最好直接去父类中直接复制,粘贴在子类中,再编写方法体。或者使用ide开发集成工具自动生成。
帮我改善此页面 (opens new window)
上次更新: 2020/12/18, 12:50:58