java中方法的重载和重写

一、方法的重载(Overload)

概念:

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

注意

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

最常用的地方就是构造器的重载。

重载规则:

a.方法名称必须相同;
b.参数列表必须不同(个数、类型、参数排序顺序不同等);
c.方法的重载和返回值类型无关,和权限修饰符也无关;
d.可以声明新的或更广的检查异常;
e.方法能够在同一个类中或者在一个子类中被重载;
f.方法的返回类型可以相同也可以不相同;
g.无法以返回值类型作为重载函数的区分标准。

二、方法的重写(Override)

概念:

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

好处:

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

注意:

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

在面向对象原则里,重写意味着可以重写任何现有方法。

重写规则:

参数列表必须完全与被重写方法的相同;
返回类型必须完全与被重写方法的返回类型相同;
访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected;
父类的成员方法只能被它的子类重写;
声明为final的方法不能被重写;
声明为static的方法不能被重写,但是能够被再次声明;
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法;
子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法;
重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以;
构造方法不能被重写;
如果不能继承一个方法,则不能重写这个方法。

三、重写与重载的区别总结

方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。

一句话概括:都体现了多态(方法和对象具有多种形态)重载(overloading):本类中,方法名相同,形参列表不同重写、覆盖(overriding):父子类(不仅限于直接父子)中,方法名相同,形参列表相同,返回值要么相同要么是父的子类
a.方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
b.方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
c.方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

java中方法的重载和重写

四、图解

java中方法的重载和重写

Original: https://www.cnblogs.com/jerrybky/p/16539493.html
Author: 不识人间烟火的你
Title: java中方法的重载和重写

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/609524/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 琐碎的想法(一)代码“优雅”的含义

    优雅的含义 代码优雅曾是翻译而来的,优雅这一个词语源于单词elegant。 elegant有三种含义,优美的(形容举止),精美的(形容物品),简明的。 形容代码上,应该包含了后两种…

    Java 2023年6月8日
    067
  • [学习笔记] Java多态

    多态是同一种行为具有多个不同表现形式的能力,同一事件发生在不同的对象上会产生不同结果; 多态的同一个接口,使用不同的实例而执行不同的操作; 多态性是对象的多种表现形式的体现; 多态…

    Java 2023年6月5日
    081
  • 《拉钩课程 — 分布式技术原理与实战》学习笔记

    1、分布式系统是用来解决集中式架构的性能瓶颈问题,其核心是可扩展性,其特点包括:不出现单点故障、无状态等。依照 CAP 理论,分布式系统只能在 CP 和 AP 之间做取舍。 2、B…

    Java 2023年6月7日
    071
  • Redis6.0.6的三大内存过期策略和八大淘汰策略

    一、前言 Redis在我们日常开发中是经常用到的,Redis也是功能非常强大,可以进行缓存,还会有一些排行榜、点赞、消息队列、购物车等等;当然还有 分&amp…

    Java 2023年6月15日
    062
  • 如何保证消息的可靠性的投递

    如何保证消息的可靠性的投递 在本项目中,添加员工会发送入职邮件,利用RabbitMQ的队列发送入职邮件。这部分只是实现发送邮件的功能,RabbitMQ它有它的优点就是异步、解耦、流…

    Java 2023年6月5日
    097
  • 4.门面Slf4j+slf4j-log4j12+log4j

    1.导入pom依赖 org.slf4j slf4j-api 1.7.27 org.slf4j slf4j-log4j12 1.7.27 log4j log4j 1.2.17 2.增…

    Java 2023年6月13日
    062
  • 你说说对Java中SPI的理解吧

    前言 最近在面试的时候被问到SPI了,没回答上来,主要也是自己的原因,把自己给带沟里去了,因为讲到了类加载器的双亲委派模型,后面就被问到了有哪些是破坏了双亲委派模型的场景,然后我就…

    Java 2023年5月29日
    079
  • Spring mvc源码分析系列–Servlet的前世今生

    Spring mvc源码分析系列–Servlet的前世今生 概述 上一篇文章Spring mvc源码分析系列–前言挖了坑,但是由于最近需求繁忙,一直没有时间…

    Java 2023年6月8日
    077
  • 待学习

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月6日
    081
  • 跟我一起学习时序数据库:入门篇(一)

    前言: 笔者最近的团队 有部分模块有规划在考虑时序数据库这块,处于兴趣考虑,简单了解一下时序数据库这块。 我会从以下结果维度来阐述这个入门基础知识。 什么是时序数据库? 定义:时序…

    Java 2023年6月15日
    058
  • POI往word模板中写入数据

    word导出excel表格自适应宽度 https://www.cnblogs.com/libin6505/p/10339045.html Word 模板引擎,基于Apache po…

    Java 2023年5月29日
    090
  • 向指定URL发送POST请求的方法

    此方法只支持HTTP请求,HTTPS请求会报错!示例如下: /** * 向指定URL发&am…

    Java 2023年6月6日
    078
  • 汇总数据库信息的存储过程

    问题: mysql日常开发过程中,数据库、表的很多信息分散在不同的工具和不同的界面中,来回切换查找非常麻烦。 解决方式: 基于这个问题,写了一个存储过程,将这些日常需要的信息集合在…

    Java 2023年6月9日
    078
  • 幂等公共组件

    前言 今天想聊一聊幂等相关的知识,以及实现一个幂等公共组件需要重点涉及和思考的点。 概念 首先,什么是幂等,在实际代码生产过程中有什么作用呢? 在编程中一个 _幂等_操作的特点是其…

    Java 2023年6月14日
    073
  • 【Redis】简单动态字符串SDS

    C语言字符串 char *str = "redis"; // 可以不显式的添加\0,由编译器添加 char *str = "redis\0"…

    Java 2023年6月8日
    087
  • Redis学习笔记(一):Redis的数据类型

    之前笔者常常接触的数据库是关系型数据库,其中MySQL接触居多。近年来NoSQL兴起,各种新型数据库不断诞生,redis就是NoSQL中的一种热门数据库。 注:此类文章仅仅作为笔者…

    Java 2023年6月6日
    067
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球