方法的覆盖(override)
语法:
public class Animal { // 父类 public void action() { System.out.println("动物在跑步!!"); } } public class Bird extends Animal { // 子类 public void action() { System.out.println("鸟在飞行!!"); } } public class Parrot extends Bird { // 继承于Bird // 继承Bird中的方法 // 由于Bird继承于Animal但是Bird中自身又重写了action所以Parrot类直接继承于Bird方法 public void action() { System.out.println("鹦鹉在学人话..."); } } public class AnimalTest { public static void main(String[] args) { /** * 以下是直接重写祖类中的方法 */ // Animal父类中的方法 Animal animal = new Animal(); animal.action(); // bird继承Animal中action方法并重写action方法 Bird bird = new Bird(); bird.action(); /** * 以下是间接继承子类中的方法 */ // 由于Bird继承于Animal但是Bird中自身又重写了action所以Parrot类直接继承于Bird方法 Parrot parrot = new Parrot(); parrot.action(); } }
方法的覆盖又被称为方法重写,英语单词: override【官方的】/overwrite
什么时候使用方法重写?
- 当父类中的方法已经无法满足当前子类的业务需求,
- 子类有必要将父类中继承过来的方法进行重新编写,
- 这个重新编写的过程称为方法重写/方法覆盖。
什么条件满足之后方法会发生重写呢?【代码满足什么条件之后,就构成方法的覆盖呢?】(❌重点)
方法重写发生在具有继承关系的父子类之间
方法重写的时候:
返回值类型相同
方法名相同
形参列表相同
访问权限不能更低,可以更高
抛出异常不能更多,可以更少。【异常之后才能解释】
建议方法重写的时候尽量复制粘贴,不要编写,容易出错,导致没有产生覆盖
注意:(❌重点)
- 私有方法不能继承,所以不能覆盖
- 构造方法不能继承,所以不能要盖
- 静态方法不存在覆盖【多态之后解释】
- 覆盖只针对方法,不谈属性