• Java核心知识:重写(Override)与重载(Overload)


    重写(Override)

    重写是在继承体系里而言,简单说就是子类重新写了从父类继承而来的方法,但是要求 返回值和形参都不能改变,只是改了方法的核心业务功能。

    重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

    使用@override,写在方法前面,来检测是否正确覆盖重写。不写也可以重写,只是帮忙检测。推荐使用。

    注意:

    • 子类方法的返回值范围必须小于等于父类
    • 子类方法的权限修饰符必须大于等于父类

    示例:

    package base8_class_extends.demo02;
    
    public class Phone {
        public void call() {
            System.out.println("打电话");
        }
    
        public void send() {
            System.out.println("发短信");
        }
    
        public void show() {
            System.out.println("显示号码");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    package base8_class_extends.demo02;
    
    public class NewPhone extends Phone{
    
        // 来电显示功能更加丰富
        @Override
        public void show() {
            super.show();  // super 表示父类
            System.out.println("显示姓名");
            System.out.println("显示头像");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    package base8_class_extends.demo02;
    
    public class OverrideTest {
        public static void main(String[] args) {
            Phone phone = new Phone();
            NewPhone newPhone = new NewPhone();
    
            phone.show();
            newPhone.show();
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    以上可以看到:可以不去修改老代码,而是在去继承老的代码,在老代码的基础上实现新的方法,或者重写一些方法用来迭代加强功能等。

    方法的重写规则:

    1. 参数列表与被重写方法的参数列表必须完全相同;
    2. 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类;
    3. 访问权限不能比父类中被重写的方法的访问权限更低;
    4. 声明为 final 的方法不能被重写;
    5. 声明为 static 的方法不能被重写,但是能够被再次声明;
    6. 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法;
    7. 子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法;
    8. 构造方法不能被重写。

    重载(Overload)

    重载是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

    只要使用一个方法名,就可以实现根据参数来调用不同的方法。

    参数不同指:

    1.参数个数不同
    2.参数类型不同
    3.参数的多类型顺序不同

    与下列因素无关:

    1.参数的名称无关
    2.返回值类型无关

    示例:

    public class MethodOverload {
        public static void main(String[] args) {
            System.out.println(sum(2, 3));
            System.out.println(sum(1, 2, 3));
        }
    
        public static int sum(int a, int b) {
            System.out.println("两个参数相加");
            return a + b;
        }
    
        public static int sum(int a, int b, int c) {
            System.out.println("三个参数相加");
            return a + b + c;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    重载规则:

    1. 被重载的方法必须改变参数列表(参数个数或类型不一样);
    2. 被重载的方法可以改变返回类型;
    3. 被重载的方法可以改变访问修饰符;
    4. 被重载的方法可以声明新的或更广的检查异常;
    5. 方法能够在同一个类中或者在一个子类中被重载。

    重写与重的区别

    区别点重载方法重写方法
    参数列表必须修改一定不能修改
    返回类型可以修改一定不能修改
    异常可以修改可以减少或删除,一定不能抛出新的或者更广的异常
    访问可以修改一定不能做更严格的限制(可以降低限制)
  • 相关阅读:
    请求和响应
    非零基础自学Java (老师:韩顺平) 第5章 程序控制结构 5.11 跳转控制语句 - break
    用Postman发送xml数据
    Connor学Android - JNI和NDK编程
    Gopher进阶神器:拥抱刻意练习,从新手到大师。
    CONNMIX 开发 WebSocket 用户消息中心
    TCP SYNCookie机制
    Android Gradle plugin 版本和Gradle 版本
    使用AIGC快速涨粉
    shell脚本命令行参数 | while getopts
  • 原文地址:https://blog.csdn.net/qq_43745578/article/details/125631194