回顾一下方法重载:
1.什么时候考虑使用方法重载overload?
答:当在一个类中,如果功能相似的话,建议将名称定义成一样,只是参数列表(个数,顺序,类型)不同,这样代码美观,且方便编程。
2.什么条件构成方法重载overload?
答:(1)同一个类当中;(2)方法名相同;(3)参数列表不同(个数,顺序,类型)
3.什么时候我们会考虑使用“方法覆盖”呢?
子类继承父类之后,当继承过来的方法无法满足当前子类的业务需求时,子类有权利对这个方法进行重新编写,又叫“方法的覆盖”。
方法覆盖又叫做:方法重写,英文单词:Override。
4.方法覆盖的条件是什么?
(1)两个类必须有继承关系,这是前提条件;
(2)重写之后的方法和之前的方法具有相同的返回值类型,相同的方法名,相同的形式参数列表;
(3)重写方法的访问权限不能比之前方法的权限更低,可以更高;
(4)重写方法的抛出异常数不能比之前方法的抛出异常数更多,可以更少。
5、方法覆盖的注意事项:
(1)方法覆盖只是针对方法,和属性无关;
(2)父类的私有方法无法覆盖;
(3)构造方法不能被继承,所以构造方法也不能被覆盖;
(4)方法覆盖只是针对实例方法,静态方法覆盖没有意义;
(5)书写方法覆盖时,建议使用复制粘贴父类的方法到子类,手动写可能会失误。
测试代码:
public class MyTest {
public static void main(String[] args) {
Cat c1 = new Cat();
c1.run(); //输出:猫在走猫步!!!
Bird b1 = new Bird();
b1.run(); //输出:鸟儿在飞翔!!!
}
}
class Animal {
// 移动方法,访问权限为protected,比public低
protected void run() {
System.out.println("动物在移动!!!");
}
}
class Cat extends Animal {
//改方法的访问权限不能比原继承方法的访问权限低,可以更高
public void run() {
System.out.println("猫在走猫步!!!");
// 这里不能抛出异常,因为抛出异常数=1 > 继承方法的抛出异常数
/*try {
throw new Exception("抛出异常");
} catch (Exception e) {
e.printStackTrace();
System.out.println("捕获异常");
}*/
}
}
class Bird extends Animal {
public void run() {
System.out.println("鸟儿在飞翔!!!");
}
}