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("显示号码");
    }
}
package base8_class_extends.demo02;

public class NewPhone extends Phone{

    // 来电显示功能更加丰富
    @Override
    public void show() {
        super.show();  // super 表示父类
        System.out.println("显示姓名");
        System.out.println("显示头像");
    }
}
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. 声明为 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. 方法能够在同一个类中或者在一个子类中被重载。

重写与重的区别

区别点重载方法重写方法
参数列表必须修改一定不能修改
返回类型可以修改一定不能修改
异常可以修改可以减少或删除,一定不能抛出新的或者更广的异常
访问可以修改一定不能做更严格的限制(可以降低限制)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ethan-running

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值