Java语言中的重写(override)和重载(overload)

2023-11-08

Java语言中的重写(override)和重载(overload)

重写(override)和重载(overload)是编程语言中的两个常见概念,用于描述函数或方法的特定行为。

重写指的是在子类中重新定义(覆盖)父类中已经存在的同名方法。重写可以修改或扩展父类的方法实现,使其更适合子类的需求。在重写中,子类方法的名称、参数类型、返回值类型必须与父类方法完全一致。

重载指的是在同一个类中定义多个同名的方法,但它们具有不同的参数类型和/或数量。在调用这些方法时,编译器会根据传入的参数类型和数量选择相应的方法进行调用。重载方法的返回值类型可以相同也可以不同。方法的名称必须相同,但参数列表必须有所不同。Java语言中的重载(overload)只能同一个类中。

一个重写方法的例子

假设有一个名为 "Vehicle" 的父类,其中包含一个名为 "move" 的方法。如果我们创建了一个名为 "Car" 的子类,并希望修改 "move" 方法的实现,以便更好地适应汽车的运动方式,那么我们可以使用重写在 "Car" 类中重新定义 "move" 方法。源码如下:

//重写示例
class Vehicle {
  public void move() {
    System.out.println("The vehicle is moving.");
  }
}

class Car extends Vehicle {
  @Override
  public void move() {
    System.out.println("The car is driving on the road.");
  }
}

public class TestOverride {
   public static void main(String args[]){
      Vehicle a = new Vehicle (); // Vehicle 对象
      Vehicle b = new Car(); // Car对象
 
      a.move();// 执行 Vehicle 类的方法
 
      b.move();//执行 Car 类的方法
   }
}

在这个例子中,Car 类重写了 Vehicle 类的 move() 方法,因此当我们调用 Car 的 move() 方法时,它将输出 "The car is driving on the road." 而不是原来的 "The vehicle is moving."。

特别提示,@Override注解不是必需的,但建议在重写父类方法时使用它。

@Override注解可以省略,但不建议这样做。如果我们在子类中重写了父类的方法,并且使用了@Override注解来标识这个方法,那么编译器会在编译时检查该方法是否正确地覆盖了父类中的同名方法。这可以帮助我们避免一些错误。如果我们省略了@Override注解,则编译器将无法检查出这些错误。

使用@Override注解还可以使代码更加易读和易维护。在阅读代码时,我们可以很容易地看到哪些方法是重写了父类中的方法。

一个重载方法的例子

源码如下:

//重载示例
class TestOverload{
  public int add(int a, int b) {
    return a + b;
  }
  
  public int add(int a, int b, int c) {
    return a + b + c;
  }
  
  public String add(String a, String b) {
    return a + b;
  }

  public static void main(String[] args){
    TestOverload o = new  TestOverload();
    int result1 = o.add(10,20); //执行int add(int a, int b)方法
    System.out.println(result1); //30
    int result2 = o.add(10,20,30); //执行int add(int a, int b, int c)方法       
    System.out.println(result2); //60
    String result3 = o.add("10", "20"); //执行String add(String a, String b)方法
    System.out.println(result3); //1020
  }
}

在这个例子中,我们在TestOverload类中定义了三个名为 "add" 的方法。一个接收int类型2个参数,一个接收int类型3个参数,还有一个接收String类型参数。当我们使用 TestOverload类的对象调用 add() 方法时,编译器会根据传入的参数类型和数量选择相应的方法进行调用。

在Java中,多态性是指同一个方法名称可以被不同的对象调用,且能够根据调用对象的实际类型来执行不同的方法。方法重载和方法重写是Java多态性的两种不同表现形式。

方法重载是指在同一个类中,可以有多个方法具有相同的名称,但参数列表必须不同或参数类型不同。重载方法可以有不同的返回类型,只要参数列表不同即可。

而方法重写是指子类实现了与父类相同的方法名称、参数类型和返回类型的方法。子类在重写方法时,可以改变方法的实现细节,但不能改变方法的名称、参数列表和返回类型。通过方法重写,子类可以覆盖掉父类的方法,并使用自己的实现逻辑。

方法重载和方法重写都是Java中多态性的不同表现,可以让程序更加灵活和易于扩展。

小结

重写(Override)是指子类使用与父类相同的方法名、返回类型和参数类型来覆盖父类中已有的方法实现。当我们需要修改父类中的方法实现时,就需要重写该方法。重写的方法不能比原来的方法具有更严格的访问权限,因为重写后的方法要能被父类类型的引用调用。重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。

重载(Overload)是指在同一个类中,有多个方法名称相同但参数列表不同的方法。它们的方法名相同,但参数类型、个数或顺序不同,即为重载。重载方法可以返回不同的值类型。

方法的重写和重载是Java多态性的不同表现,方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

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

Java语言中的重写(override)和重载(overload) 的相关文章

  • 在 Java 中连接和使用 Cassandra

    我已经阅读了一些关于 Cassandra 是什么以及它可以做什么的教程 但我的问题是如何在 Java 中与 Cassandra 交互 教程会很好 如果可能的话 有人可以告诉我是否应该使用 Thrift 还是 Hector 哪一个更好以及为什
  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐

  • angularjs $http调用接口的方式

    angularjs http调用接口的方式 http get merchantmall merchant json success function data status headers config console log argume
  • Java8 方法积累

    Java8 方法积累 removeIf 移除集合中字段全为NULL的无意义对象 list removeIf filter gt filter getProperty1 null filter getProperty2 null stream
  • 6款免费的PDF解锁软件

    下面这些软件提供不同的选项来解锁PDF文件 如 暴力攻击 字典攻击 网络搜索 掩码攻击和键搜索攻击选项 支持可以部署的各种攻击方法 如 简单方法 复杂方法和混合方法 也可以为攻击设置不同的选项 例如 要包括的字符和数字 要扫描的密码长度等
  • Apache服务器的下载安装与配置

    最近在学习Android 需要搭建一个服务器 于是在网上查找了一些资料 主要参考博文https www cnblogs com yerenyuan p 5460336 html点击打开链接 目前官网可以下载的版本是2 4 29 分VC14和
  • Redis 管道

    目录 Redis 管道 Abstract 管道和原生批命令的比较 管道和脚本的区别 使用管道需要注意的事项 Redis 管道 Abstract Redis 客户端执行一条命令分 4 个过程 发送命令 命令排队 命令执行 返回结果 这个过程称
  • 2.4.9 Profile虚拟以太网网卡参数

    最后更新2021 07 22 参考 lt 图 242 虚拟IO设备管理界面 gt 我们来了解一下虚拟以太网网卡参数 图 244 虚拟以太网参数设置 普通设置 Adapter ID 等同于虚拟IO设备的Slot ID 槽位号 参考 lt 49
  • 在crontab中执行scrapy(解决不执行,不爬取数据的问题)

    文章来着 在crontab中执行scrapy 解决不执行 不爬取数据的问题 自我的进化 在crontab中执行scrapy会遇到命令不执行 或者执行了但是没有爬取数据的问题 这里做一下总结 先说这里遇到的问题和解决方案 spider不执行
  • 图说设计模式

    软件模式是将模式的一般概念应用于软件开发领域 即软件开发的 总体指导思路或参照样板 软件模式并非仅限于设计模式 还包括 架构模式 分析模式和过程模式等 实际上 在软件生存期的每一 个阶段都存在着一些被认同的模式 本书使用图形和代码结合的方式
  • 《CSDN 涨粉攻略》11个涨粉方法,你学会了几个?

    文章目录 前言 一 我最近的涨粉情况 二 不忘初心 三 涨粉要诀 1 社区 a 规则 b 详述 2 热榜 a 规则 b 详述 3 粉丝可见 a 规则 b 详述 4 标题 a 规则 b 详述 5 封面 a 规则 b 详述 6 一键三连 a 规
  • python中的元组(tuple)的用法

    以下内容主要摘抄博客 https blog csdn net yezonggang article details 50976664 utm medium distribute pc relevant none task blog Blog
  • 几种常见开源软件授权协议

    转载地址见图片
  • Data Structure (三)

    动态规划 1 区间调度问题 1 1无权区间调度问题 任务j开始于sj 结束于fj 如果两个任务没有重叠的时间 则两个任务互相兼容 目标 找到最多 最大互相兼容的任务集合 贪心算法总是做出当前最优的选择 贪心算法并不总能得到最优解 但是它是最
  • MATLAB绘图设置坐标轴标注

    绘图之后设置坐标轴标注 以下均为用例 自行按需更改 xlim 0 512 限制x轴坐标数值范围 ylim 0 512 限制y轴坐标数值范围 set gca XTick 0 510 4 512 设定x轴坐标刻度 0 512是数值范围 512
  • Qt开发,链接了数据库后,调用QSqlQuery::setQuery执行SQL语句获取我们想要的数据

    继上篇文章将数据库封装成一个类 链接为成员函数 而当我将查询做为另一个函数时 无法对已有的database进行操作 尽管db为类的成员 同样会报错误 QSqlQuery exec database not open QSqlQueryMod
  • C#判断是否是以管理员权限允许当前应用

    private static bool CheckForAdminRights string path Path Combine Environment GetFolderPath Environment SpecialFolder Win
  • 微信小程序防止后退,返回主页,30秒看完关闭

    防止后退 使用 wx redirectTo 代替wx navigateto 关闭返回主页 在onShow function 中调用wx hideHomeButton 讲完收工
  • 国产chatgpt:基于chatGLM微调nlp信息抽取任务

    文章目录 一 传统nlp做信息抽取 二 什么是零样本和少样本 1 零样本和少样本的概念 2 零样本和少样本的应用场景 3 零样本和少样本在大模型时代的优势和意义 4 相比传统NLP 零样本和少样本学习具有以下优势 三 大模型时代信息抽取 c
  • pip 使用国内镜像源及常用命令

    Python pip默认是从pypi org官网下载包 即使用的是国外的镜像源 https pypi python org simple 因此在下载安装包时速度非常慢 还经常出现连接超时 导致下载失败的情况 所以 一般在下载安装包的时候 都
  • 一文解决java.lang.UnsatisfiedLinkError

    首先大家先了解下 ABI和CPU 不同的 Android 手机使用不同的 CPU 而不同的 CPU 支持不同的指令集 CPU 与指令集的每种组合都有专属的应用二进制接口 即 ABI 每个 ABI 支持一个或多个指令集 每个 ABI 支持的指
  • Java语言中的重写(override)和重载(overload)

    Java语言中的重写 override 和重载 overload 重写 override 和重载 overload 是编程语言中的两个常见概念 用于描述函数或方法的特定行为 重写指的是在子类中重新定义 覆盖 父类中已经存在的同名方法 重写可