Java中重载(overload)与重写(override)

2023-10-27

重载(overload):

在一个类中,同名的方法如果有不同的参数列表(参数类型不同,参数个数不同,参数顺序不同)则视为重载。同时重载对返回类型没有要求,可以相同也可以不同。

重载是一个类中多态性的一种表现,Java中的重载就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数列表(参数类型,参数个数,参数顺序)。调用方法时,通过传递给它们的不同参数列表来决定具体使用哪个方法。

public class Student {
	private String name;
	private int age;
	private String stuID;
	
	
	
	public Student(){
	}
	
	public Student(String name){
		this.name=name;
	}
	
	public Student(String name,int age){
		this.name=name;
		this.age=age;
	}
	
	public Student(String name,int age,String stuID){
                this(name, age);
		this.stuID=stuID;
	}
	
	public static void main(String [] args){
		Student stu1=new Student();
		Student stu2=new Student("张三");
		Student stu3=new Student("李四",17);
		Student stu4=new Student("王五",34,"a3939345");
	}
}

在上述代码中,Student类中的四个构造函数就是方法的重载(方法名相同,参数列表不同)。在新建对象时,即调用构造方法时,通过判断不同的参数列表,来决定调用哪一个构造方法。

重写(overload):

重写是父类与子类之间的多态性,实质是子类对父类的方法进行重新定义。如果在子类中定义的方法与其父类的方法具有相同的方法名和参数列表,即构成重写。即外壳不变,核心重写!

eg:儿子继承了父亲的中餐馆

      A:我还想做中餐------------------------------------不需要重写

      B:我想改做西餐------------------------------------需要重写

      C:我想在中餐之上加入西餐---------------------需要重写(super中餐,再加入西餐)

重写需要遵循的原则:“两同两小一大”

“两同”:方法名相同,参数列表相同

“两小”:子类方法的返回值类型小于等于父类方法的返回值类型

          (void和基本数据类型时,必须相等;引用数据类型时,小于或等于,其中父类大,子类小)

           子类方法抛出的异常小于等于父类方法抛出的异常

“一大”:子类方法的访问权限大于或等于父类方法的访问权限

总结:

重载(overload):“一同一异,其他随意”-------->方法名相同,参数列表不同,其他随意。

重写(override):“两同两小一大”------->方法名相同,参数列表相同;返回值类型和抛出异常要小于等于;访问权限要大于等于

 

重载与重写是Java多态性的不同表现:

重载是一个类中的多态性表现,遵循“编译期绑定”,在编译时,根据不同参数列表调用方法。(静态多态性)

重写是父类与子类的多态性表现,遵循“运行期绑定”,在运行时,根据不同对象类型调用方法。(动态多态性)

 

Java程序的执行分为两个时期:编译期和运行期

编译期:.java源文件,经过编译,生成.class字节码文件。

运行期:JVM加载.class字节码文件并运行。

 

 

 


面试问题:重载(overload)和重写(override)的区别?

答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。
 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中重载(overload)与重写(override) 的相关文章

随机推荐

  • Flask配置MySQL数据库使用

    文章目录 一 创建Flask 二 安装sqlalchemy 三 创建配置文件config py 四 绑定配置文件 参考资料 一 创建Flask pip install flask 成功安装之后app py如下所示 from flask im
  • python常用算法题-python基本算法题(一)

    1 3位水仙花数计算 3位水仙花数 是指一个三位整数 其各位数字的3次方和等于该数本身 例如 ABC是一个 3位水仙花数 则 A的3次方 B的3次方 C的3次方 ABC 使用Python 输出所有的3位水仙花数 gt gt gt for i
  • 匹配中文的正则表达式

    u4e00 u9fa5 匹配中文 匹配注释 不严密
  • hexo配置GitHub/gitee双部署

    我的博客主页 https qingmuzhang gitee io GitHub作为国外站点实在是比较慢也不太稳定 所以决定把博客搬到国内的gitee上 提高访问速度 gitee创建仓库 1 首先登录gitee https gitee co
  • matlab做三次拉格朗日插值多项式_拉格朗日插值法函数使用问题

    拉格朗日差值法 在数值分析中 拉格朗日插值法是以法国十八世纪数学家约瑟夫 拉格朗日命名的一种多项式插值方法 概念一般地 若已知 在互不相同 n 1 个点 处的函数值 即该函数过 这n 1个点 则可以考虑构造一个过这n 1 个点的 次数不超过
  • MLX90614红外温度计介绍

    MLX90614红外温度计简介 MLX90614是一款红外非接触温度计 TO 39金属封装里同时集成了红外感应热电堆探测器芯片和信号处理专用集成芯片 由于集成了低噪声放大器 17位模数转换器和强大的数字信号处理单元 使得高精度和高分辨度的温
  • 使用Stream流对集合排序

    文章目录 0 写在前面 1 格式 1 1 介绍 1 2 单个属性排序格式 1 3 多个属性排序格式 1 4 注意事项 2 代码举例 0 写在前面 有一些业务需要对集合按照一些规则进行排序 本篇介绍如何用Stream 对集合进行升序或者降序操
  • 学python可以做什么副业-写代码做副业月入10K的方法都藏在这几个公众号里!

    同为程序员 为什么总有人比你优秀 优秀的人是抱团的 因此 还不快关注这些优秀的公众号 学习技术 汲取他们的理念 化为己用 Python 爱好者社区 python shequ 简介 Python 爱好者社区 这里有分类整理好的历史优秀文章数千
  • Altium Designer多图纸原理图关联设计方法

    文章转载 http articles e works net cn eda article86269 htm 图纸结构 包括层次式图纸的连接关系是纵向的 也就是某一层次的图纸只能和相邻的上级或下级有关系 另一种即扁平式图纸的连接关系是横向的
  • 尚硅谷_vue核心基础部分

    01 初始vue 1 想让vue工作 就必须创建一个Vue实例 且要传入一个配置对象 2 root容器里的代码依然符合html规范 只不过混入了一些特殊的Vue语法 3 root容器里的代码被称为 Vue模板 4 Vue实例和容器是一一对应
  • crmeb 标准版Window+phpstudy8安装教程(一)

    标准版Window phpstudy8安装教程 一 安装前配置 nginx mysql php7 3 4 一 安装集成环境 这里以phpstudy为例 下载PHPstudy8 0安装 记录安装的位置 D phpstudy pro 二 准备源
  • 阿里云修复 polkit pkexec 本地提权漏洞(CVE-2021-4034)

    该漏洞EXP已公开传播 漏洞利用成本极低 建议您立即关注并修复 如何修复呢 解决建议 1 无法升级软件修复包的 可使用以下命令删除pkexec的SUID bit权限来规避漏洞风险 chmod 0755 usr bin pkexec 示例 l
  • maven野生仓库

    mvnrepository com
  • 洛谷借教室

    之前写过 再过一遍其实不会 题目描述 在大学期间 经常需要租借教室 大到院系举办活动 小到学习小组自习讨论 都需要向学校申请借教室 教室的大小功能不同 借教室人的身份不同 借教室的手续也不一样 面对海量租借教室的信息 我们自然希望编程解决这
  • linux服务器桌面卡死,linux服务器显卡崩溃解决方案

    在登录界面出现分辨率特别大 整个图形界面特别大 并且怎么也登录不上去的情况时 对于这种情况 一般就是显卡驱动崩了的原因 所以我们可以首先检查显卡驱动是否有问题 nvidia smi 如果出现说驱动链接不上什么的问题 就是说明你的显卡驱动出现
  • 九、Linux系统编程:线程池编程

    9 线程池编程 创建线程要花费昂贵的资源和时间 如果任务来了才创建线程那么响应时间会变长 而且一个进程能创建的线程数有限 为了避免这些问题 在程序启动的时候就创建若干线程来响应处理 它们被称为线程池 里面的线程叫工作线程 9 1 概念 线程
  • sql-lab (32~35)包含对 宽字节注入的原理理解及注意事项(后持续更新)

    32 35 包含对 宽字节注入的原理理解及注意事项 sql lab 32 我们先对32关进行一个传参 发现 1 and 1 2 在这里 代表的意思是 转义 把后面的 转义成了字符串 使单引号不再具有 作用 仅仅是 内容 而已 或者说这个单引
  • Intellijidea建javaWeb以及Servlet简单实现

    一 创建并设置javaweb工程 1 创建javaweb工程 File gt New gt Project 点击Project后出现如下界面 选择Java Enterprise 选中下图圈中部分 点击Next后弹出下图弹出框 设置工程名字
  • 深度学习环境搭建(三)之 CUDA安装

    安装完CUDA Driver后 就可以安装CUDA了 因为项目需要 这里安装的CUDA 11 4版本 下载CUDA 访问CUDA Toolkit官网 找到要下载的版本 如果驱动已经安装 不要选驱动 配置CUDA环境 打开用户配置文件 sud
  • Java中重载(overload)与重写(override)

    重载 overload 在一个类中 同名的方法如果有不同的参数列表 参数类型不同 参数个数不同 参数顺序不同 则视为重载 同时重载对返回类型没有要求 可以相同也可以不同 重载是一个类中多态性的一种表现 Java中的重载就是在类中可以创建多个