Java:重载和重写

对 Java 中的 重载和重写 这个概念,做一个微不足道的小小小小结

重载

重载:编译时多态,同一个类中的同名的方法,参数列表不同,与返回值无关。

有以下几点:

  1. 方法名必须相同;
  2. 方法的参数列表一定不一样;
  3. 访问修饰符和返回值类型可以相同也可以不同;

重写

重写(又名覆盖):运行时多态,发生在子类与父类之间、子类重写父类的方法具有相同的返回类型、更好的访问权限,简而言之:就是具体的实现类对于父类的该方法实现不满意,需要自己在写一个满足于自己要求的方法。

有以下几点:

  1. 方法名必须相同,返回值类型必须相同(可以不同的,见说明),参数列表必须相同

    说明:自JDK1.5之后的版本,返回值也可以不同,但是必须是父类返回值的子类,其中涉及到了 java 中的"语法糖",即在将 *.java 编译为 *.class过程中,进行了一些自动转换,本质上生成了一种桥接方法synthetic bridge,在此不进行具体展开,后续关于JVM的笔记中会补充说明

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

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

    static:重载是基于运行时的多态,而static方法是编译时静态绑定的,static 方法跟类的任何实例都不相关,所以概念上不适用。

    静态方法:静态的方法可以被继承,但是不能重写。如果父类和子类中存在同样名称和参数的静态方法,那么该子类的方法会把原来继承过来的父类的方法隐藏,而不是重写。通俗的讲就是父类的方法和子类的方法是两个没有关系的方法,具体调用哪一个方法是看是哪个对象的引用;这种父子类方法也不再存在多态的性质。

  4. 构造方法不能被重写

总结

重载(Overloading) 重写(Overriding)
类的数量 本类 父子类、接口与实现类
方法名称 一致 一致
参数列表 可以修改 不能修改
返回值类型 可以修改 可以修改,但必须是父类返回值的子类
访问修饰符 可以修改 可以修改,但不能比父类的访问权限低
异常 可以修改 可以减少或删除,但不能扩展

参考

https://blog.csdn.net/qq_42014192/article/details/89707483

Java:重载和重写的更多相关文章

  1. java 重载、重写、构造函数详解

    方法重写 1.重写只能出现在继承关系之中.当一个类继承它的父类方法时,都有机会重写该父类的方法.一个特例是父类的方法被标识为final.重写的主要优点是能够定义某个子类型特有的行为. class An ...

  2. Java——重载和重写

    前言 在程序设计中经常会遇到对对方法的重载或者重写,下面将介绍重载和重写. 重载(Overloade) 重载出现的原因 任何程序设计语言都具备的一项重要特性就是对名字的运用.当创建一个对象时,就给对象 ...

  3. java 重载、重写、重构的区别

    1.重载 构造函数是一种特殊的函数,使用构造函数的目的是用来在对象实例化时初始化对象的成员变量.由于构造函数名字必须与类名一致,我们想用不同的方式实例化对象时,必须允许不同的构造方法同时存在,这就用到 ...

  4. 深入理解Java重载与重写

    我们都知道Java有三大宝,分别是:多态.封装.继承.其中多态主要体现就是重写与重载(有些人认为重载根本不属于多态)两种方式,那么今天就结合研读过JVM之后自己的理解来聊聊重载与重写的VM内部是怎么实 ...

  5. 一句话学Java——Java重载和重写

    概念:重载是指两个不同的函数有相同的名称,可以是在本类之中的函数之间的重载,也可以是子类和父类的函数之间的函数重载. 重写:只能是子类重写父类的函数.这是多态的基础. 重写的规则:     参数:重写 ...

  6. 漫谈java重载与重写

    重载(Overloading):为了让方法名相同而形参不同的构造方法同时存在,让类以统一的方式处理不同类型数据的一种手段 重写(Overriding):导出类对继承自基类的方法做出一定的修改,又称方法 ...

  7. java重载和重写的区别

    一.重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现 ...

  8. java 重载与重写 【转】

    首先我们来讲讲:重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态 ...

  9. java重载和重写

    重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. ...

  10. JAVA构造器,重载与重写

    1. java构造器 构造器也叫构造方法(constructor), 用于对象初始化. 构造器是一个创建对象时被自动创建的特殊方法,目的是对象的初始化. 构造器 的名称与类的名称一致. JAVA通过n ...

随机推荐

  1. python库--pandas--文本文件读取

    .read_table() / read_csv()     filepath_or_buffer 文件路径 sep='\t' 分隔符. 设置为N, 将尝试自动确定 delimiter=N sep的备 ...

  2. git config 选项

    git config  --global -- global 写入选项:写入全局的 ~/.gitconfig 文件而不是版本库的 .git/config,如果 ~/.gitconfig 文件不存在,则 ...

  3. 【转】.net core开发windows服务

    .net core开发windows服务 文建Blog

  4. 一些PHP选项参数相关的函数

    关于 PHP 的配置,我们大多数情况下都是去查看 php.ini 文件或者通过命令行来查询某些信息,其实,PHP 的一些内置函数也可以帮助我们去查看或操作这些配置参数.比如之前我们学习过的 关于php ...

  5. nuxt打包等注意事项

    打包步骤: 1.首先执行 npm run build 2.将打包好的 .nuxt static nuxt.config.js package.json 这四个文件丢到服务器的某个文件夹中,在服务器上安 ...

  6. 微信公众号授权获取code带多个参数 丢失参数

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&re ...

  7. TP5指定讲师页面文章上下篇

    控制器代码 // 查询上下篇 $courseIds = model('course') ->where([ 'isdel' => 0, 'teacherid' => $teacher ...

  8. 创建一个新的解耦的Orchard Core CMS网站

    引言本文将介绍创建一个功能齐全.解耦的CMS网站的过程,该网站允许您编辑博客帖子并呈现它们.解耦是一种开发模型,其中站点的前端和后端(管理)托管在同一个Web应用程序中,但只有后端由CMS驱动.然后, ...

  9. Linux系列(29) - rpm包命名规则(1)

    RPM包命名规则 例如包名:httpd-2.2.15-15.el6.centsos.1.i686.rpm 软件包名-httpd 软件版本-2.2.15 发布的次数-15 el6.centos适合的Li ...

  10. P7597 「EZEC-8」猜树 加强版

    #include<bits/stdc++.h>using namespace std;#define rg register#define inf 0x3f3f3f3f#define ll ...