Java基础(4)重载和重写

2024-04-29 08:20
文章标签 java 重载 重写 基础

本文主要是介绍Java基础(4)重载和重写,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在Java中,重载(Overloading)和重写(Overriding)是两种允许我们以不同的方式使用相同的方法名的机制,但它们在使用场景、目的和规则上有着本质的区别。

重载(Overloading)

重载发生在同一个类中,它允许多个方法有相同的名字,但是它们的参数列表必须不同(参数的数量不同、类型不同或参数的排列顺序不同)。

代码演示
class DemoClass {// 方法重载:通过参数的数量void display(int a){System.out.println("Got Integer data.");}// 方法重载:通过参数的类型void display(String a){System.out.println("Got String data.");}// 方法重载:通过参数的顺序void display(int a, String b){System.out.println("Got Integer and String data.");}void display(String a, int b){System.out.println("Got String and Integer data.");}
}
解析

重载的决策是在编译时做出的,编译器通过参数列表的不同来选择对应的方法版本。这种机制可以提高程序的可读性和重用性。

重写(Overriding)

重写或覆盖发生在两个类之间的父子关系中。当子类定义一个与父类中签名相同的方法时,子类的方法会覆盖父类的方法。方法的返回类型、名称、参数列表都必须相同。此外,子类方法不能缩小父类方法的访问权限。

代码演示
class ParentClass {void show() {System.out.println("ParentClass's show()");}
}class ChildClass extends ParentClass {@Overridevoid show() {System.out.println("ChildClass's show()");}
}
解析

重写的决策是在运行时做出的,这是多态性的一个关键方面。通过重写,子类能够提供特定于自己的行为实现,同时保留与父类相同的方法签名。而@Override注解虽不是必需的,但它可以帮助编译器检查你的代码,确保你确实是在重写父类的方法。

重载与重写的主要差异

  • 定义位置:重载发生在同一个类中,而重写发生在父子类之间。
  • 方法签名:重载的方法必须改变参数列表;重写的方法必须有相同的方法签名。
  • 访问权限:重载的方法可以改变访问权限;重写的方法不能缩小访问权限。
  • 返回类型:重载的方法可以改变返回类型;重写的方法的返回类型应该相同,或者是协变返回类型(子类重写的方法可以返回父方法返回类型的子类)。
  • 异常:重载的方法可以抛出新的检查异常,但重写的方法不能抛出新的检查异常,且不能抛出比被重写方法更广泛的检查异常。
  • static和final方法:静态方法可以被重载,但不能被重写(重写只适用于实例方法)。被final修饰的方法可以被重载,但不能被重写。

结论

理解重载和重写之间的区别是深入掌握Java语言的关键。通过合理使用这两种机制,可以使我们的代码更加灵活和具有可维护性。

这篇关于Java基础(4)重载和重写的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/945574

相关文章

【吊打面试官系列】Java高并发篇 - 同步方法和同步块,哪个是更好的选择?

大家好,我是锋哥。今天分享关于 【同步方法和同步块,哪个是更好的选择?】面试题,希望对大家有帮助; 同步方法和同步块,哪个是更好的选择? 同步块是更好的选择,因为它不会锁住整个对象(当然你也可以让它锁住整个对象)。同步方法会锁住整个对象,哪怕这个类中有多个不相关联的同步块,这通常会导致他们停止执行并需要等待获得这个对象上的锁。   同步块更要符合开放调用的原则,只在需要锁住的

Spring Boot应用部署 - JAR包部署瘦身

瘦身部署方案 说明 在日常开发测试环境中,随着业务代码的增加,Maven依赖的jar包也越来越多,导致工程包越来越大。通过阿里云流水线部署时,构建时长逐渐变得不够使用。为了解决这个问题,我们提出了以下瘦身部署方案。 执行 2.1 工程打包jar文件,解压取出非工程依赖的jar(BOOT-INF/lib) 在构建过程中,首先将工程打包为jar文件,然后解压该jar文件,取出其中的非工程依赖

201_C++基础

一、C++结构体相关知识 一段代码阐释所有初始化与赋值的情况: #include<stdio.h>#include<iostream>#include<string.h>using namespace std;//结构体初始化的几种方式//定义一个node结构体typedef struct node{int id;int num;string name;//1、无参数的构造函数数组初

零基础掌握Kafka

Apache Kafka是当前最流行的分布式流处理平台之一,由LinkedIn开发并于2011年开源。它被设计用于高吞吐量、低延迟的场景,广泛应用于日志收集、流处理、事件源等多种场合。本文将带你从零开始学习Kafka,并通过Java代码示例展示如何发送消息。 第一部分:Kafka基础知识 1.1 Kafka简介 Kafka是一个分布式的、可分区的、可复制的消息系统,它主要用于处理大规模实时消

软件测试之 性能测试 性能测试基础指标 Loadrunner、Jmeter等工具

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^) 想看更多 那就点个关注吧 我会尽力带来有趣的内容 本文档基于 https://www.bilibili.com/video/BV1wC4y1Y7yX/?spm_id_from=333.337.search-car

【058】基于SpringBoot+Vue校园失物招领系统的设计与实现

系统介绍 基于SpringBoot+Vue校园失物招领系统主要通过使用Java语言编码设计系统功能,MySQL数据库管理数据,AJAX技术设计简洁的、友好的网址页面,然后在IDEA开发平台中,编写相关的Java代码文件,接着通过连接语言完成与数据库的搭建工作,再通过平台提供的Tomcat插件完成信息的交互,最后在浏览器中打开系统网址便可使用本系统。本系统的使用角色可以被分为用户和管理员,用户具有

【JVM】ASM开发

认识ASM ASM是一个Java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能。 ASM可以直接产生二进制class文件,也可以在类被加载入虚拟机之前动态改变类行为,ASM从类文件中读入信息后能够改变类行为,分析类信息,甚至能根据要求生成新类。 目前许多框架如cglib、Hibernate、Spring都直接或间接地使用ASM操作字节码。 ASM编程模型 1)Core API

【JVM】阅读Class字节码:常量池

目录 基本结构解析 常量池 常量池简介 如何阅读Class文件中的常量池信息 基本结构解析 Magic(魔数) Magic的唯一作用是确定这个文件是否为一个能被虚拟机所接受的class 文件。魔数值固定为0xCAFEBABE,不会改变。 常量池 常量池简介 下图是反编译过后的字节码文件中我们找到的常量池的部分。  可见常量池数量是从1到52,共52个常量,了

Springboot集成Netflix-ribbon、Enreka实现负载均衡-12

Netflix Ribbon简介 Netflix Ribbon是Netflix发布的云中间层服务开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。 具体来说,Ribbon是一个客户端负载均衡器,可以在配置文件中列出所有的服务提供方机器,然后Ribbon会自动基于某种规则(如简单轮询、随机连接等)去连接这些机器。同时,Ribbon也提供了一系列完善的配置项

【JavaEE】Maven简介与实用指南:项目构建和依赖管理的高效工具

目录 Maven什么是 Maven为什么学 Maven创建一个Maven项目依赖传递依赖排除 Maven 仓库本地仓库中央仓库私服 Maven设置国内源配置当前项⽬setting设置新项⽬的setting Maven 什么是 Maven 官⽅对于 Maven 的描述: Maven 是⼀个项⽬管理⼯具。基于 POM(Project Object Model,项⽬对象模