Java重写与重载之间的区别

作者:薇薇一笑g 时间:2021-06-30 03:16:13 

重写(Override)

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

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

重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常。

方法的重写规则

  • 参数列表必须完全与被重写方法的相同;

  • 返回类型必须完全与被重写方法的返回类型相同;

  • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。

  • 父类的成员方法只能被它的子类重写。

  • 声明为final的方法不能被重写。

  • 声明为static的方法不能被重写,但是能够被再次声明。

  • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。

  • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。

  • 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。

  • 构造方法不能被重写。

  • 如果不能继承一个方法,则不能重写这个方法。

重载(Overload)

重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

只能重载构造函数

重载规则

  • 被重载的方法必须改变参数列表(参数个数或类型或顺序不一样);

  • 被重载的方法可以改变返回类型;

  • 被重载的方法可以改变访问修饰符;

  • 被重载的方法可以声明新的或更广的检查异常;

  • 方法能够在同一个类中或者在一个子类中被重载。

  • 无法以返回值类型作为重载函数的区分标准

区别点重载方法重写方法
参数列表必须修改一定不能修改
返回类型可以修改一定不能修改
异常可以修改可以减少或删除,一定不能抛出新的或者更广的异常
访问可以修改一定不能做更严格的限制(可以降低限制)

总结

方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载是一类中多态性的一种表现。

来源:http://www.cnblogs.com/guweiwei/p/6288068.html

标签:Java,重写,重载
0
投稿

猜你喜欢

  • Android拍照或从图库选择图片并裁剪

    2023-07-01 08:21:45
  • Java使用TCP实现在线聊天的示例代码

    2021-10-16 23:49:53
  • 深入分析c# 继承

    2023-02-18 21:36:31
  • java实现学籍管理系统

    2023-04-03 00:32:19
  • 使用java采集京东商城行政区划数据示例

    2023-04-17 06:31:52
  • Java MyBatis可视化代码生成工具使用教程

    2022-12-05 15:23:39
  • Android监听手机电话状态与发送邮件通知来电号码的方法(基于PhoneStateListene实现)

    2022-12-07 09:03:44
  • 使用adb or fastboot命令进入高通的9008(edl)模式的两种方法

    2023-02-02 15:50:49
  • Java深入浅出数组的定义与使用下篇

    2022-12-04 10:27:38
  • SpringBoot2整合Drools规则引擎及案例详解

    2021-12-30 05:57:10
  • Android 获取屏幕高度,标题高度,状态栏高度(实例代码)

    2022-10-17 15:49:37
  • java实现猜拳游戏

    2023-08-04 04:23:52
  • SpringBoot如何整合redis实现过期key监听事件

    2023-08-04 18:51:19
  • C++野指针和悬空指针的实现方法

    2022-11-02 08:26:56
  • 深入Android HandlerThread 使用及其源码完全解析

    2023-11-30 19:16:56
  • 如何在Android studio 中使用单例模式

    2023-03-17 21:00:38
  • IntelliJ Plugin 开发之添加第三方jar的示例代码

    2021-11-27 13:35:52
  • Android Intent调用 Uri的方法总结

    2021-11-13 22:46:53
  • java中hasNextInt判断后无限循环输出else项的解决方法

    2023-11-15 10:12:44
  • SpringBoot Mybatis Plus公共字段自动填充功能

    2022-09-01 12:22:33
  • asp之家 软件编程 m.aspxhome.com