文章目录
1、方法覆盖的使用时机
当父类中的方法已经无法满组当前子类的业务需求,子类有必要将父类中继承过来的方法进行重新编写,这个重新编写的过程叫做方法的重写/方法覆盖。
2、方法重写的条件
建议进行重写时,尽量复制粘贴,避免出现错写情况,导致未发生重写。
方法重写发生在具有继承关系的父子类之间
方法重写时:返回值类型相同,方法名相同,形参列表相同
方法重写时:访问权限不能更低,只能更高,子类高于父类
方法重写时:抛出异常不能更多,可以更少。
注意:
私有方法不能继承,所以不能覆盖。
构造方法不能继承,所以不能覆盖。
静态方法不存在覆盖。
覆盖只针对方法,不谈属性。
//测试类
public class AnimalTest {
public static void main(String[] args) {
Animal a = new Animal();
a.move();
Cat c = new Cat();
c.move();
Bird b = new Bird();
b.move();
}
}
//动物类
public class Animal {
public void move(){
System.out.println("动物在移动!");
}
}
//猫科类
public class Cat extends Animal{
// public void Move(){若此函数名写成大写,则输出结果c.move还是输出动物在移动,因为此类中未发生重写。
public void move() {
System.out.println("猫在走猫步!");
}
}
}
//鸟类
public class Bird extends Animal{
public void move(){
System.out.println("鸟儿在飞翔!")
}
}
输出结果:
动物在移动!
猫在走猫步!
鸟儿在飞翔!
分析:注意第23行代码,如果出现复写失败的话,程序就会找到该类的父类,对父类中的同名方法进行操作。例如猫类中继承鸟类,鸟类继承动物类。而猫类中如果写错成Move方法,那么主程序中执行的仍然是Cat中的move方法,虽然没有写出来,但是这个方法是确实从父类Animal中继承过来的。因为此时并未发生重写(或者说重写失败了)那么输出将会是:动物在移动! 动物在移动!鸟儿在飞翔!
。