Java 中的重写与重载

目录

重写

重写的条件

重写的示例

重载(Overload)

重载的条件

重载的示例

区别总结


Java 作为一门面向对象的编程语言,提供了丰富的多态性支持,其中重写(Override)和重载(Overload)是实现多态性的两种基本方式。这两种技术虽然名字相似,但在功能和用途上有着根本的区别。本文将详细介绍重写和重载的定义、规则以及它们在实际开发中的应用。

重写

重写是子类对父类方法的重新实现。当子类继承父类后,如果父类的某个方法不能满足子类的需求,子类可以定义一个与父类相同名称和参数的方法来覆盖父类的方法。

重写的条件

  1. 方法名和参数列表必须完全相同
  2. 返回类型可以是被重写方法的返回类型的子类型(Java 5及以上版本)。
  3. 访问权限不能比父类中被重写的方法更严格
  4. 重写方法可以抛出任何非强制性异常,但不能抛出新的或更广泛的强制性异常
  5. 被标记为 final 的方法不能被重写

重写的示例

class Animal {public void move() {System.out.println("动物可以移动");}
}class Dog extends Animal {@Overridepublic void move() {System.out.println("狗可以跑和走");}
}public class TestDog {public static void main(String[] args) {Animal a = new Animal();Animal b = new Dog();a.move();b.move();}
}

在这个例子中,Dog 类重写了 Animal 类的 move 方法。尽管变量 b 被声明为 Animal 类型,但它实际引用的是 Dog 对象,所以调用的是 Dog 类的 move 方法。

重载(Overload)

重载发生在同一个类中,当两个或多个方法具有相同的名称但参数列表不同时,这些方法就被视为重载。重载使得程序可以定义多个同名的方法,通过输入参数的不同来执行不同的功能。

重载的条件

  1. 参数列表必须不同(参数数量或类型不同)。
  2. 被重载的方法可以改变返回类型
  3. 被重载的方法可以改变访问权限
  4. 被重载的方法可以声明新的或更广泛的检查异常

重载的示例
 

public class Overloading {public int test() {System.out.println("test1");return 1;}public void test(int a) {System.out.println("test2");}public String test(int a, String s) {System.out.println("test3");return "returntest3";}public String test(String s, int a) {System.out.println("test4");return "returntest4";}public static void main(String[] args) {Overloading o = new Overloading();System.out.println(o.test());o.test(1);System.out.println(o.test(1, "test3"));System.out.println(o.test("test4", 1));}
}

区别总结

  • 参数列表:重载方法必须修改参数列表;重写方法一定不能修改。
  • 返回类型:重载方法可以修改返回类型;重写方法返回类型一定不能修改,除非是子类型。
  • 异常:重载方法可以修改异常;重写方法可以减少或删除异常,不能抛出新的或更广泛的异常。
  • 访问权限:重载方法可以修改访问权限;重写方法不能实施更严格的访问限制。

通过理解和应用重写与重载,Java开发者可以有效地使用多态性,提高程序的灵活性和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/1450.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

el-menu 有一级二级三级菜单

效果如下 菜单代码如下 <el-menu:default-active"menuDefaultActive"class"el-menu-box":text-color"menuTextColor":active-text-color"menuActiveTextColor":unique-opened"true"><!-- 一级菜单 --><tem…

浏览器原理之浏览器同源策略

一 什么是同源策略 同源策略&#xff08;Same-Origin Policy, SOP&#xff09;是一种重要的安全策略&#xff0c;用于Web浏览器中。它限制了一个源&#xff08;origin&#xff09;的文档或脚本如何与另一个源的资源进行交互。这有助于防止恶意文档窃取另一个文档的数据&#x…

二、python+前端 实现MinIO分片上传

python前端 实现MinIO分片上传 一、背景二、流程图三、代码 一、背景 问题一&#xff1a;前端 -> 后端 ->对象存储 的上传流程&#xff0c;耗费带宽。 解决方案&#xff1a;上传流程需要转化为 前端 -> 对象存储&#xff0c;节省上传带宽 问题二&#xff1a;如果使用…

Crypto量化高频体验总结

Crypto量化高频体验总结 人工智能与量化交易算法知识库 2024-04-21 21:02 美国 以下文章来源于Quant搬砖工 &#xff0c;作者quant搬砖队工头 Quant搬砖工. 稳健的收益要一点一点赚&#xff0c;量化的板砖要一块一块搬&#xff01; 前言 前两天在翻历史文章的时候&#xf…

【高阶数据结构】并查集 -- 详解

一、并查集的原理 1、并查集的本质和概念 &#xff08;1&#xff09;本质 并查集的本质&#xff1a;森林。 &#xff08;2&#xff09;概念 在一些应用问题中&#xff0c;需要将 n 个不同的元素划分成一些不相交的集合。 开始时&#xff0c;每个元素自成一个单元素集合&…

SpringBoot 集成Nacos注册中心和配置中心-支持自动刷新配置

SpringBoot 集成Nacos注册中心和配置中心-支持自动刷新配置 本文介绍SpringBoot项目集成Nacos注册中心和配置中心的步骤&#xff0c;供各位参考使用 1、配置pom.xml 文件 在pom.xml文件中定义如下配置和引用依赖&#xff0c;如下所示&#xff1a; <properties><pr…

buuctf之ciscn_2019_c_1

ciscn_2019_c_1 一、查看属性二、静态分析三、动态分析四、思路五、exp 一、查看属性 首先还是必要的查看属性环节&#xff1a; 可以知道该文件是一个x86架构下的64位小端ELF文件&#xff0c;开启了栈不可执行&#xff08;NX&#xff09; 执行一下&#xff0c;先有一个选择&…

ROS2 王牌升级:Fast-DDS 性能直接碾压 zeroMQ 「下」

以下内容为本人的学习笔记&#xff0c;如需要转载&#xff0c;请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/aU1l3HV3a9YnwNtC1mTiOA 性能比较 下面就以官网的测试数据为准&#xff0c;让我们一起来看看它们的性能差别到底怎样。 本次比较仅针对 Fast RT…

SQL语法基础-其他函数V

SQL语法基础-其他函数V 一、数据类型转换函数二、系统信息函数三、条件表达式函数四、XML相关函数五、JSON函数&#xff08;从Oracle 12c开始支持&#xff09; 一、数据类型转换函数 这类函数用于将数据从一种类型转换为另一种类型&#xff0c;非常有用于数据清洗和准备阶段。…

60道计算机二级模拟试题选择题(含答案和解析)

点击下载《60道计算机二级模拟试题选择题&#xff08;含答案和解析&#xff09;》 1. 前言 本文设计了一份针对计算机二级考试的选择题&#xff0c;旨在考察考生对计算机基础知识和应用技能的掌握情况。试题涵盖了计算机基础知识、操作系统、办公软件、计算机网络等多个方面&…

【CVPR2023】《A2J-Transformer:用于从单个RGB图像估计3D交互手部姿态的锚点到关节变换网络

这篇论文的标题是《A2J-Transformer: Anchor-to-Joint Transformer Network for 3D Interacting Hand Pose Estimation from a Single RGB Image》&#xff0c;作者是Changlong Jiang, Yang Xiao, Cunlin Wu, Mingyang Zhang, Jinghong Zheng, Zhiguo Cao, 和 Joey Tianyi Zhou…

polkit服务启动失败

使用systemctl 命令报错 Authorization not available. Check if polkit service is running or see debug message for more information. 查看polkit状态是失败的状态&#xff0c;报缺少libstdc.so.6 systemctl status polkit 需要安装libstdc.so.6库 先加载所有安装包 …

Java学习Go(入门)

下载Go 《官网下载golang》 直接点Download&#xff0c;然后根据你自己的操作系统进行下载&#xff0c;我这里以win10为例 安装go 默认安装到C:\Program Files\Go&#xff0c;这里我们可以选择安装到其他盘&#xff0c;也可以选择默认安装。初学者建议直接一路next。 安装完…

IMUGNSS的误差状态卡尔曼滤波器(ESKF)---更新过程

IMU&GNSS的误差状态卡尔曼滤波器&#xff08;ESKF&#xff09;---更新过程 ESKF的更新过程 ESKF的更新过程 前面介绍的是ESKF的运动过程&#xff0c;现在考虑更新过程。假设一个抽象的传感器能够对状态变量产生观测&#xff0c;其观测方程为抽象的h,那么可以写为 其中z为…

python爬虫笔记1

1 爬虫介绍 爬虫概述&#xff1a; 获取网页并提取和保存信息的自动化程序 1.获取网页 2.提取信息 css选择器 xpath 3.保存数据&#xff08;大数据时代&#xff09; 4.自动化 爬虫&#xff08;资产收集&#xff0c;信息收集&#xff09; 漏扫&#xff08;帮我发现漏洞&#xff…

使用Python比较两张人脸图像并获得准确度

使用 Python、OpenCV 和人脸识别模块比较两张图像并获得这些图像之间的准确度水平。 一、原理 使用Face Recognition python 模块来获取两张图像的128 个面部编码&#xff0c;并比较这些编码。比较结果返回 True 或 False。如果结果为True &#xff0c;那么两个图像将是相同的…

Android startForegroundService与startForeground

启动service service启动有四种形式。 1.显示启动(如直接按service的全路径启动) 2.隐示启动(如通过intent-filter的action标签启动) 3.通过bindservice显示启动。 4.通过bindservice隐示启动。 Demo 创建一个service的子类&#xff0c;如 import android.app.Notifica…

Python程序设计 字典

教学案例十 字典 1. 判断出生地 sfz.txt文件中存储了地区编码和地区名称 身份证的前6位为地区编码&#xff0c;可以在sfz.txt文件中查询到地区编号对应的地区名称 编写程序&#xff0c;输入身份证号&#xff0c;查询并显示对应的地区名称 若该地区编码不在文件中&#xff0c;…

【Redis(1)】Redis数据类型及使用场景

1.Redis是什么&#xff1f; Redis是一个开源的&#xff0c;高性能的键值存储数据库。它以其出色的性能、丰富的数据类型和原子操作而闻名。Redis支持多种类型的数据结构&#xff0c;如字符串、列表、集合、有序集合和哈希&#xff0c;使其成为存储各种数据的理想选择。 主要特…

SQVI创建以及生成程序

SAP数据快速查询工具&#xff1a;Sqvi-QuickView 项目实施&运维阶段&#xff0c;为了快速获取一些透明表数据&#xff0c;一开始接触项目肯定会通过大量的数据表查找&#xff0c;然后线下通过EXCEL通过VLOOKUP进行数据关联&#xff0c;这种方式在关联数据较少的情况比较适应…