方法重写Override
什么是方法的重写
当父类的方法不能满足子类的需求时,我们可以在子类中重写父类的方法,重写也称为(复写或者覆盖)
什么时候用方法的重写
- a、父类继承过来的方法无法满足当前子类业务需求的时候
- b、父类的方法只是一个空方法,它代表着父类具备这种动作,但是需要在子类里面才能具体化
构成条件
1、两个类必须要有继承关系
2、重写之后的方法和之前的方法具有,相同的
- 返回值类型
- 方法名
- 形式参数列表
3、访问权限不能更低,可以更高
4、重写之后的方法不能 比之前的方法抛出更多的异常
方法的重载和重写的区别
注意事项
- (私有 / 构造)方法不能被覆盖
- 方法重写只和方法有关,和属性无关
- 方法覆盖只针对于“实例方法”,静态方法无意义
- 当方法未覆盖时,调用的时就是父类的,当覆盖之后调用的就是子类的
- 子类重写父类的方法,访问控制修饰符要大于等于父类的;
- 返回类型可以小于等于父类的
- 基本数据类型不能变,引用数据类型才可以变小
- 异常的类型可以小于等于父类的
特殊情况
(静态方法不存在重写,强制重写也不报错)
静态方法存在重写吗?—>不存在
那么如果要强制对静态方法重写,会报错吗?—>不报错
代码演示
public class Duotai {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat();//子类有的调用子类的
dog.sleep();//子类没有的调用父类的
//狗狗在吃东西
//睡觉
}
}
class Animal {
public void eat() {
System.out.println("吃东西");
}
public void sleep() {
System.out.println("睡觉");
}
}
class Dog extends Animal {
//重写父类的eat的方法
public void eat() {
System.out.println("狗狗在吃东西");
}
public void run() {
System.out.println("狗狗跑的飞快。");
}
}