• 关于方法重写/方法覆盖


    /**
     * 回顾方法重载:
     *     - 方法重载又称为Overload
     *     - 方法重载的使用时机:
     *           * 在同一个类当中,方法完成的功能相似,建议方法名相同,这样方便程序员的编程,就像在调用同一个方法似的
     *     - 满足什么条件才构成方法重载:
     *           * 在同一个类当中
     *           * 方法名相同
     *           * 参数列表不同:类型不同、顺序不同、个数不同都叫不同
     *     - 方法重载和什么无关:
     *           * 和方法的修饰符列表无关
     *           * 和方法的返回值类型无关
     * 关于方法覆盖:
     *     - 方法覆盖又称为方法重写/override(overwrite)
     *     - 什么时候用到方法覆盖
     *           当父类中的方法已经无法满足当前子类的业务需要,子类有必要将从父类中继承过来的方法进行重新编写,这个编写的过程称为方法重写/方法覆盖
     *     - 代码满足什么条件之后,就构成了方法覆盖:
     *           * 方法覆盖发生在具有继承关系的父子类之间
     *           * 方法覆盖的时候要求:返回值类型相同,方法名相同,形参列表相同
     *           * 方法覆盖的时候要求:和父类相比访问权限不能更低,可以更高
     *           * 方法覆盖的时候要求:和父类相比抛出异常不能更多,可以更少
     *           * 对于返回值类型来说:覆盖后的方法 如果是基本数据类型必须一致,而引用数据类型可以变小
     *                               (但实际开发中意义不大,几乎没有人这样使用)
     *
     *     - 建议方法覆盖的时候尽量复制粘贴,编写容易出错,导致覆盖没有发生
     *     - 注意:
     *           * 私有方法无法覆盖
     *           * 构造方法不能被继承,所以不能覆盖
     *           * 方法覆盖只针对实例方法,静态方法覆盖没有意义(方法覆盖通常和多态联合使用)
     *           * 覆盖只针对方法,不针对属性
     */
    public class OverrideText {
        public static void main(String[] args) {
    //       创建cat对象
            Cat c = new Cat();
            c.move();
    //        创建bird对象
            Bird b = new Bird();
            b.move();
    //        创建鹦鹉对象
            YingWu y = new YingWu();
            y.move();
        }
    }

    /*

    方法没有重写程序运行结果如下:

    动物在移动
    动物在移动
    动物在移动

    */

    /*

    方法重写后程序运行结果如下:

    猫在抓老鼠
    鸟儿在飞行
    鹦鹉在学说话

    */

    /*
    //子类没有重写父类方法的代码
    //Cat类继承Animal类
    public class Cat extends Animal {
    }
    //Bird类继承Animal类
    public class Bird extends Animal {
    }
    //YingWu类继承Animal类
    public class YingWu extends Bird {
    }

    */

    //子类重写父类的代码如下:

    //Cat类继承Animal类
    public class Cat extends Animal {
        //重写父类的move()方法
        public void move() {
            System.out.println("猫在抓老鼠");
        }
    }
    //Bird类继承Animal类
    public class Bird extends Animal {
        //重写父类的move()方法
        public void move() { 
            System.out.println("鸟儿在飞行");     
        }    
    }
    //YingWu类继承Animal类
    public class YingWu extends Bird {
        public void move() {
            System.out.println("鹦鹉在学说话");
        }
    }
    

  • 相关阅读:
    pytest运行时参数说明,pytest详解,pytest.ini详解
    OC Extension 检测手机是否安装某个App(源码)
    腾讯薪酬改革:晋升不再直接调薪;iPhone 4S 和 6S 将被列入过时产品;Perl 5.36.0发布|极客头条
    JavaSE_day01【Java概述、环境搭建、标识符、变量、基本数据类型】
    XAML依赖属性和附加 属性
    [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
    Day657.思考题解答⑤ -Java业务开发常见错误
    Vue.js+Node.js全栈开发教程:Vue.js数据冻结
    操作系统八股文背诵版
    深度适配云环境,火山引擎推出云操作系统veLinux
  • 原文地址:https://blog.csdn.net/heliuerya/article/details/127933202