java 之多态的实现之方法的重载和方法重写

news2024/10/7 18:21:06

文章目录

  • 多态的主要概念和实现方式:
    • 重写
      • 重写方法的规则:
      • 示例:
      • 调用重写方法:
      • 注意事项:
    • 重载
      • 方法重载的条件:
      • 方法重载的例子:
      • 重载方法的调用:
      • 注意事项:

在这里插入图片描述

在 Java 中,多态性是面向对象编程中的一个重要概念,它允许不同的子类对象被当作其父类类型来使用,从而使得同一个方法调用可以表现出不同的行为。多态性实现了一个接口或者抽象类的多种实现方式,使得代码更加灵活、可扩展和易维护。

多态的主要概念和实现方式:

  1. 继承和多态性:多态性依赖于继承,子类可以使用父类的对象并且重写父类方法以提供特定的实现。

  2. 方法的重写(Override):子类可以重写父类的方法来提供特定的实现。当父类的引用指向子类对象时,调用这个方法时会执行子类的实现。

  3. 方法的重载(Overload):与方法重载不同,方法重载是在同一个类中,而方法的重写是子类重写父类的方法。

重写

方法的重写(Method Overriding)是面向对象编程中的一个重要概念,它允许子类重新定义(覆盖)从其父类继承的方法,以提供特定于子类的实现。当子类重写(覆盖)父类的方法时,子类中的方法签名(方法名、参数列表)必须与父类中的方法相同。

重写方法的规则:

  1. 方法签名相同:子类中重写的方法必须与父类中被重写的方法具有相同的方法名、参数列表和返回类型。

  2. 访问修饰符不能缩小:子类中重写的方法不能降低访问权限。例如,父类方法是 public,则子类重写方法也必须是 public 或者 protected

  3. 异常类型限制:子类重写的方法不能抛出比父类方法更多的异常,但可以不抛出异常或者抛出父类方法抛出的异常的子类异常。

示例:

class Animal {
    void makeSound() {
        System.out.println("Some sound");
    }
}

class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("Bark");
    }
}

调用重写方法:

Animal myDog = new Dog();
myDog.makeSound(); // 输出 "Bark",因为 myDog 是 Dog 类的实例,调用的是子类重写的方法

注意事项:

  • 动态绑定:在运行时,会根据对象的实际类型来调用相应的方法,即使是用父类的引用指向子类对象。
  • 子类方法覆盖父类方法:子类重写的方法会覆盖父类的同名方法。如果使用子类的对象调用这个方法,将执行子类的方法实现。

方法重写允许子类修改继承的方法实现,使得代码更具灵活性和可扩展性。通常用于实现多态性,让不同的子类对象能够有自己特定的行为。

重载

在Java中,方法重载是指在同一个类中可以存在多个方法名相同但参数列表不同的情况。方法重载使得您可以使用相同的方法名,但根据参数的类型、数量或顺序来执行不同的操作。

以下是方法重载的几个关键点:

方法重载的条件:

  1. 方法名相同:重载方法必须有相同的方法名。
  2. 参数列表不同:参数列表必须有所区别,可以是参数的类型、数量或者顺序的不同。

方法重载的例子:

public class Example {
    // 方法重载示例
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }

    public int add(int a, int b, int c) {
        return a + b + c;
    }
}

在这个例子中,add 方法被重载了三次。第一个 add 方法接受两个整数参数,第二个 add 方法接受两个双精度浮点数参数,第三个 add 方法接受三个整数参数。

重载方法的调用:

编译器会根据方法调用时提供的参数类型,数量和顺序来决定使用哪个重载方法。例如:

Example example = new Example();
int sumInt = example.add(2, 3); // 调用第一个 add 方法
double sumDouble = example.add(2.5, 3.7); // 调用第二个 add 方法
int sumThreeInt = example.add(1, 2, 3); // 调用第三个 add 方法

注意事项:

  • 返回类型不作为重载的条件:方法重载可以拥有不同的返回类型,只要参数列表不同即可。
  • 方法重载不依赖于访问修饰符:方法可以使用不同的访问修饰符进行重载。
  • 方法重载与继承无关:方法重载是在同一个类中进行的,与继承无关。

方法重载是提高代码的可读性和灵活性的重要方式。通过合理使用方法重载,可以让代码更清晰、简洁并且更容易维护。

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

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

相关文章

基于单片机GP2D12测距-proteus仿真-源程序

基于51单片机红外测距-proteus仿真-源程序 一、系统方案 本设计采用51单片机作为主控器,液晶1602显示,GP2D12采集距离值,按键设置报警阀值,测量值超过阀值,蜂鸣器报警。 二、硬件设计 原理图如下: 三、单…

文件重命名自动化:批量处理让生活更简单

在我们的日常生活和工作中,需要处理大量的文件,无论是文档、图片、音频还是视频。很多时候,为了更好地管理和查找,我们都需要对文件进行重命名。然而,一个一个地重命名文件既耗时又容易出错。幸运的是,随着…

婴儿车上架美国站亚马逊TEMU平台认证标准要求ASTMF833测试报告CPC认证

婴儿车上架跨境电商平台美国站或者出口美国需要提交CPC认证,ASTMF833测试标准检测合规报告,才能进入美国市场,由美国CPSC 认可的实验室出具的检测报告,确认每件商品均已通过检测,符合上述适用要求。 本政策适用的卧式…

京东商品详情API接口(PC端和APP端),京东详情页,商品属性接口,商品信息查询

京东开放平台提供了API接口来访问京东商品详情。通过这个接口,您可以获取到商品的详细信息,如商品名称、价格、库存量、描述等。 以下是使用京东商品详情API接口的一般步骤: 注册并获取API权限:您需要在京东开放平台上注册并获取…

电脑发热发烫,具体硬件温度达到多少度才算异常?

环境: 联想E14 问题描述: 电脑发热发烫,具体硬件温度达到多少度才算异常? 解决方案: 电脑硬件的温度正常范围会因设备类型和使用的具体硬件而有所不同。一般来说,以下是各种硬件的正常温度范围: CPU:正…

【八股哪背的完】Redis我先背这点儿,够用!

Redis篇 数据类型及其业务场景 字符串(String) 字符串类型是最基本的数据类型,value 最多可以容纳的数据长度是 512M。 存储任意类型的数据,包括数字、文本等。适用于缓存、计数器、分布式锁等场景。共享 Session 信息 哈希&am…

Pandas数据分析Pandas进阶在线闯关_头歌实践教学平台

Pandas数据分析进阶 第1关 Pandas 分组聚合第2关 Pandas 创建透视表和交叉表 第1关 Pandas 分组聚合 任务描述 本关任务:使用 Pandas 加载 drinks.csv 文件中的数据,根据数据信息求每个大洲红酒消耗量的最大值与最小值的差以及啤酒消耗量的和。 编程要求…

思维模型 锚定效应

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。先入为主,决策易偏。 1 锚定效应的应用 1.1 定价策略中的锚定效应 黑珍珠的定价策略:在 20 世纪 70 年代,黑珍珠被视为一种廉价的珠宝。然而&#xff…

【ARFoundation学习笔记】平面检测

写在前面的话 本系列笔记旨在记录作者在学习Unity中的AR开发过程中需要记录的问题和知识点。难免出现纰漏,更多详细内容请阅读原文。 文章目录 平面检测属性可视化平面平面检测的开关控制显示与隐藏已检测平面 平面检测属性 AR中检测平面的原理:AR Fou…

ZYNQ_project:led

本次实验完成:led流水间隔0.5s 闪烁间隔0.25s。 名词解释: analysis分析:对源文件进行全面的语法检查。 synthesis综合:综合的过程是由 FPGA 综合工具箱 HDL 原理图或其他形式源文件进行分析,进而推演出由 FPGA 芯…

记录:Unity脚本的编写5.0

目录 前言创建动画Unity Animation、Animator常用类关于两者的区别Animator 编写脚本 大型连续剧之在untiy中(或者别的什么活动) 前言 之前在场景中添加了背景音乐,而在我们的日常的体验中,可以发现游戏或者场景中有很多有趣的动…

【mongoose】mongoose 基本使用

1. 连接数据库 // 1. 安装 mongoose // 2. 导入 mongoose const mongoose require(mongoose) // 3. 连接 mongodb 服务 mongoose.connect(mongodb://127.0.0.1:27017/xx_project) // 4. 设置回调 .on 一直重复连接 .once 只连接一次 mongoose.connection.on(open, () >…

测试用例的设计方法(全):错误推测方法及因果图方法

目录 错误推测方法 一. 方法简介 因果图方法 一. 方法简介 二. 实战演习 错误推测方法 一. 方法简介 1. 定义:基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法。 2. 错误推测方法的基本思想: 列举出程序中…

创建删除查看电脑用户

命令框输入net user 查看计算机现有用户 创建用户 net user 用户名 密码 /add 创建隐藏账户 net user 用户名$ 密码 /add 删除用户 注册表查看用户,并创建用户 winR 运行regedit打开注册表编辑器,找到SAM把读取勾选上,关闭后重新打开注册表编…

使用 Clipdrop 替换长安三万里电影海报中的天空

长安三万里是一部不久前上映的古装动画电影,讲述了李白和高适的故事。电影海报中的天空是一片晴朗的月空,与扬州城的景色相得益彰。 最近,我发现了一款名为 Clipdrop 的软件,可以用来替换图片中的天空。这款软件使用人工智能技术&…

Vue3 简单实现虚拟Table,展示海量单词.利用WebAPI speechSynthesis,朗读英语单词

目录 本页面完整代码 视频演示 完整的页面代码 利用webapi speechSynthesis帮助我们自动郎读英语单词,可以利用这个API,做一些小说朗读或到账提示。 本页面完整代码 用Vue写了一个简单页面,里面还写了一个简单的虚拟Table支持海量数据展示…

Docker 持久化存储和数据共享_Volume

有些容器会自动产生一些数据,为了不让数据随着 container 的消失而消失,保证数据的安全性。例如:数据库容器,数据表的表会产生一些数据,如果我把 container 给删除,数据就丢失。为了保证数据不丢失&#xf…

GET 请求和 POST 请求

浅析HTTP中请求GET/POST - 知乎 (zhihu.com) 什么是GET GET:从服务器请求数据后获取服务端数据 常见发起get请求的方式: URL、src/href、表单(form) 格式: index.php?userNamejack&password123 语法(keyvalue&keyva…

【Linux】 JumpServer 堡垒机远程访问

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。JumpS…

【1++的Linux】之线程(二)

👍作者主页:进击的1 🤩 专栏链接:【1的Linux】 文章目录 一,对上一篇内容的补充二,Linux线程互斥1. 互斥的引出2. 互斥量3. 剖析锁的原理 一,对上一篇内容的补充 线程创建: pthread…