- 方法重写(覆盖):就是子类有一个方法和父类的某个方法的方法名、返回值类型、参数列表一样,那么我们就说子类这个方法覆盖了父类的方法。【英文单词:override】
- 什么时候使用方法重写?
- 当父类中方的方法已经无法满足当前子类的业务需求,子类有必要将父类中继承过来的方法重新编写,这个重新编写的过程称为方法重写/方法覆盖。
- 方法覆盖需要满足下面4个条件
- 子类方法的形参列表、方法名称,要和父类方法的形参列表,方法名称完全一致。
- 子类方法的返回值类型和父类方法的返回值类型一样,或者是父类返回值类型的子类【因为子类肯定是一个父类,可以完成自动类型的转换(向上转型)】。
- 子类方法不能缩小父类方法的访问权限,但是可以扩大。
- 子类不能抛出比父类更多的异常,但可以抛出父类方法异常的子异常。
- 父子类中某个方法的方法名和形参列表完全一致,编译器就认为子类中的这个方法要完成对父类中这个方法的覆盖。那么如果在子类中给该方法分配给方法更小的访问权限或者该方法的返回值类型与父类不兼容或者父类中的方法被final修饰就会编译报错。
- 注意:
- 私有方法在子类中不可见,所以不能覆盖(想盖也盖不住啊)。【比如在父子类中各有一个私有的方法,那么子类这个方法不可能覆盖父类的方法,没有覆盖关系】
- 构造方法不能继承,所以不能覆盖。
- 静态方法不存在覆盖。【讲完多态后解释】
- 覆盖指针都方法,不针对属性。
- java里重写某个方法后为什么在重写的方法里还要调用父类的该方法?
- 如果父类方法能完全实现我们想用的功能,就不需重写该方法;如果父类方法所实现的功能跟我们所需的功能完全不同,就要全部重写;如果父类方法只是部分实现了我们所需的功能,就要在重写方法时调用父类方法,并在其上扩展功能。