/*
* 覆写:覆盖/重写/覆写
* 覆写特指成员方法,通过覆写实现特有的功能
* 子类有自己的特有属性
* 可以覆写父类的成员方法
* 应用场景
* 1 什么时候需要重写
* 如果父类无法满足子类需求,需将父类中的方法重写
* 2 重写条件
* 1 必须具有继承关系
* 2 方法名必须相同,返回值必须相同,参数列表必须相同
* 3 不能比原方法具有更宽泛的异常
* 4 不能比原方法具有更低的访问权限
* 5 特指成员方法
* 6 被覆盖方法不能为private
* 作用:代码重用
* 功能:方法可以覆写,多态(动态性)
* 目的:
* 1 满足当前需求,方法体编码
* 2 错误减少,不能有更宽泛的异常
* 3 使用范围越来越广,不能有更低的访问权限
* 4 功能增强
*
* Overload和Override区别
* 1 分别是什么 分别是方法重载与方法覆写,
* Overload中方法名相同,参数列表不同(参数个数、参数类型、参数顺序),可以改变返回值类型
* 重载在编译阶段可以根据规则知道调用哪个方法,故重载又称为静态绑定(printf函数)
* Override中方法名、返回值和参数列表必须相同,不能有更高的异常,不能有更低的访问权限
* 实例:接口中所有声明方法的重写
* 2 分别干什么
* Overload方法名相同,功能不同,解决命名问题,
* Override主要是代码的重用和功能的扩展,不能满足时候在扩展
* 3 区别
* Overload在同一个类中也可以实现,比如构造器的重载,在同一个类中实现。同类中多态性的表现
* Override必须具有继承关系,只能针对非静态、非final、非构造方法。父类与子类多态性的表现
* 如果想在子类覆写的方法中调用父类方法,可以使用super关键字。
* */
public class _01_Override {
public static void main(String[] args) {
Cat cat = new Cat();
cat.run();
cat.eat();
}
}
class Animal{
public void run(){
System.out.println("动物在跑");
}
public void eat(){
System.out.println("吃");
}
}
class Cat extends Animal{
// 覆写父类的方法
public void run(){
System.out.println("猫在快跑");
}
@Override
public void eat() {
System.out.println("猫吃东西");
}
}