当前位置: 首页 > news >正文

Java中的“多态“详解

多态(Polymorphism)是面向对象编程(OOP)中的一个核心概念,它允许同一个接口或方法在不同对象上具有不同的实现方式。多态性使得程序在运行时可以根据对象的实际类型来决定调用哪个方法,从而提高代码的灵活性和可扩展性。

在Java中,多态主要通过以下几种方式实现:

1. 方法重载(编译时多态)

2. 方法重写(运行时多态)

3. 接口和抽象类

下面我们通过代码示例来详细讲解这些概念。

 1. 方法重载(编译时多态)

方法重载是指在同一个类中,可以定义多个方法名相同但参数列表不同的方法。编译器在编译时会根据方法的参数列表来决定调用哪个方法。

class Calculator {// 方法重载:加法public int add(int a, int b) {return a + b;}// 方法重载:加法,可以接受三个整数public int add(int a, int b, int c) {return a + b + c;}// 方法重载:加法,可以接受两个double类型的参数public double add(double a, double b) {return a + b;}
}public class OverloadExample {public static void main(String[] args) {Calculator calc = new Calculator();System.out.println(calc.add(2, 3)); // 输出: 5System.out.println(calc.add(2, 3, 4)); // 输出: 9System.out.println(calc.add(2.5, 3.5)); // 输出: 6.0}
}

在这个例子中,Calculator类中有三个 add 方法,它们具有不同的参数列表。调用 add 方法时,编译器会根据传入参数的类型和数量来决定使用哪个方法。

 2. 方法重写(运行时多态)

方法重写是指子类可以重写父类的方法。在运行时,Java虚拟机会根据对象的实际类型来决定调用哪个方法。

/ 父类
class Animal {public void makeSound() {System.out.println("Animal makes a sound");}
}
/ 子类1
class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("Dog barks");}
}
// 子类2
class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("Cat meows");}
}

public class OverrideExample {public static void main(String[] args) {Animal myAnimal = new Animal();Animal myDog = new Dog();Animal myCat = new Cat();myAnimal.makeSound(); // 输出: Animal makes a soundmyDog.makeSound();    // 输出: Dog barksmyCat.makeSound();    // 输出: Cat meows}
}

 

在这个例子中,Dog 和 Cat 类都重写了 Animal 类的 makeSound 方法。通过父类 Animal 的引用,可以指向不同的子类对象,调用 makeSound 方法时,会根据对象的实际类型执行相应的方法。

 3. 接口和抽象类

接口和抽象类允许定义方法的行为,而具体的实现由子类提供。通过接口和抽象类,可以实现更加灵活的多态。

// 接口
interface Shape {void draw();
}
// 实现接口的类1
class Circle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a Circle");}
}
// 实现接口的类2
class Square implements Shape {@Overridepublic void draw() {System.out.println("Drawing a Square");}
}
public class InterfacePolymorphism {public static void main(String[] args) {Shape myShape1 = new Circle();Shape myShape2 = new Square();myShape1.draw(); // 输出: Drawing a CirclemyShape2.draw(); // 输出: Drawing a Square}
}

 

在这个例子中,Shape 是一个接口,Circle 和 Square 是实现该接口的类。通过接口类型的引用,可以指向不同的实现类对象,调用 draw 方法时,会根据对象的实际类型执行相应的方法。

 总结

多态性是Java中一个强大且重要的特性,它允许程序在运行时根据对象的实际类型来决定调用哪个方法。通过方法重载、方法重写以及接口和抽象类的使用,多态性可以极大地提高代码的灵活性和可扩展性。

 

 

 

 

 

相关文章:

Java中的“多态“详解

多态(Polymorphism)是面向对象编程(OOP)中的一个核心概念,它允许同一个接口或方法在不同对象上具有不同的实现方式。多态性使得程序在运行时可以根据对象的实际类型来决定调用哪个方法,从而提高代码的灵活性…...

buuctf-[SUCTF 2019]EasySQL 1解题记录

把你的旗帜给我,我会告诉你这面旗帜是对的。 堆叠注入查询数据库 1; show databases; ​ 查询表名 1; show tables; 获取flag 1;set sql_modepipes_as_concat;select 1...

ASP.NET Core 入门

使用 .NET CLI 创建并运行 ASP.NET Core Web 应用。 文章目录 一、先决条件二、创建Web应用项目三、运行应用四、编辑Razor页面 一、先决条件 .NET 8.0 SDK 二、创建Web应用项目 打开命令行界面,然后输入以下命令: dotnet new webapp --output aspne…...

php反序列化1_常见php序列化的CTF考题

声明: 以下多内容来自暗月师傅我是通过他的教程来学习记录的,如有侵权联系删除。 一道反序列化的CTF题分享_ctf反序列化题目_Mr.95的博客-CSDN博客 一些其他大佬的wp参考:php_反序列化_1 | dayu’s blog (killdayu.com) 序列化一个对象将…...

题目 1013: [编程入门]Sn的公式求和

题目 1013: [编程入门]Sn的公式求和 [编程入门]Sn的公式求和 求Snaaaaaa…aa…aaa&#xff08;有n个a&#xff09;之值&#xff0c;其中a是一个数字&#xff0c;为2。 例如&#xff0c;n5时222222222222222&#xff0c;n由键盘输入。 #include<stdio.h> int A(int n)…...

算法——赎金信(leetcode383)

题目&#xff1a; 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1&#…...

transformers训练(NLP)阅读理解(多项选择)

简介 在阅读理解任务中&#xff0c;有一种通过多项选择其中一个答案来训练机器的阅读理解。比如&#xff1a;给定一个或多个文档h,以及一个问题S和对应的多个答案候选&#xff0c;输出问题S的答案E&#xff0c;E是答案候选中的某一个选项。 这样的目的就是通过文档&#xff0c…...

微软企业邮箱:安全可靠的企业级邮件服务!

微软企业邮箱的设置步骤&#xff1f;如何注册使用烽火域名邮箱&#xff1f; 微软企业邮箱作为一款专为企业设计的邮件服务&#xff0c;不仅提供了高效便捷的通信工具&#xff0c;更在安全性、可靠性和功能性方面树立了行业标杆。烽火将深入探讨微软企业邮箱的多重优势。 微软…...

什么是分布式锁

定义 分布式锁是控制分布式系统或集群中不同节点对共享资源访问的一种机制。在分布式环境下&#xff0c;多个节点&#xff08;如多个服务器或多个进程&#xff09;可能会同时访问诸如数据库中的某条记录、一个共享文件或者一个全局计数器等共享资源。分布式锁的目的是确保在同一…...

【含开题报告+文档+PPT+源码】基于SpringBoot的艺术培训学校管理系统的设计与实现

开题报告 艺术培训学校管理在现代教育行业中发挥着至关重要的作用&#xff0c;旨在为学员提供及时、专业且高效的课程服务&#xff0c;同时也激励培训机构不断提升教学质量与管理水平。然而&#xff0c;传统的艺术培训学校管理模式常面临一系列挑战&#xff0c;如课程报名程序…...

【网络安全 | 漏洞挖掘】绕过SAML认证获得管理员面板访问权限

未经许可,不得转载。 文章目录 什么是SAML认证?SAML是如何工作的?SAML响应结构漏洞结果什么是SAML认证? SAML(安全断言标记语言)用于单点登录(SSO)。它是一种功能,允许用户在多个服务之间切换时无需多次登录。例如,如果你已经登录了facebook.com,就不需要再次输入凭…...

Flutter:列表分页,上拉加载下拉刷新,在GetBuilder模板使用方式

GetBuilder模板使用方式参考上一节 本篇主要代码记录如何使用上拉加载下拉刷新&#xff0c; 接口请求和商品组件的代码不包括在内 pubspec.yaml装包 cupertino_icons: ^1.0.8# 分页 上拉加载&#xff0c;下拉刷新pull_to_refresh_flutter3: 2.0.2商品列表&#xff1a;controlle…...

硬件基础22 反馈放大电路

目录 一、反馈的基本概念与分类 1、什么是反馈 2、直流反馈与交流反馈 3、正反馈与负反馈 4、串联反馈与并联反馈 5、电压反馈与电流反馈 二、负反馈四种组态 1、电压串联负反馈放大电路 2、电压并联负反馈放大电路 3、电流串联负反馈放大电路 4、电流并联负反馈放大…...

挑战用React封装100个组件【001】

项目地址 https://github.com/hismeyy/react-component-100 组件描述 组件适用于需要展示图文信息的场景&#xff0c;比如产品介绍、用户卡片或任何带有标题、描述和可选图片的内容展示 样式展示 代码展示 InfoCard.tsx import ./InfoCard.cssinterface InfoCardProps {ti…...

linux高级系统编程之进程

进程 一个正在进行的程序 并行与并发 并行:执行的程序在不同CPU上同时执行 并发:一个CPU,多个进程交替执行,因为交替速度很快,所以从宏观上来看是同时执行的,但是从围观的角度是交替执行的 单道与多道 单道程序设计:所有进程一个一个排队执行,若A阻塞,B只能等待,,即使CPU处于空…...

nextjs+nestjs+prisma写todolist全栈项目

技术栈 nextjsnestjsprisma所学知识 Nextjs组件渲染,状态,路由docker启动Mysql容器prisma操作Mysql(CRUD)允许跨域请求APITanStack Query异步状态管理fetch api服务器组件预请求数据nestjs 管道和异常处理检测id是否正整数Docker启动Mysql容器 compose.yml name: todoLis…...

基于Matlab的图像去噪算法仿真

中值滤波的仿真 本节选用中值滤波法对含有高斯噪声和椒盐噪声的图像进行去噪&#xff0c;并用Matlab软件仿真。 &#xff08;1&#xff09;给图像加入均值为0&#xff0c;方差为0.02的高斯噪声&#xff0c;分别选择33模板、55模板和77模板进行去噪 Matlab部分代码&#xff1…...

Docker pull镜像拉取失败

因为一些原因&#xff0c;很多镜像仓库拉取镜像失败&#xff0c;所以需要更换不同的镜像&#xff0c;这是2024/11/25测试可用的仓库。 标题1、 更换镜像仓库的地址&#xff0c;编辑daemon.json文件 vi /etc/docker/daemon.json标题2、然后将下面的镜像源放进去或替换掉都可以…...

fastjson不出网打法—BCEL链

前言 众所周知fastjson公开的就三条链&#xff0c;一个是TemplatesImpl链&#xff0c;但是要求太苛刻了&#xff0c;JNDI的话需要服务器出网才行&#xff0c;BCEL链就是专门应对不出网的情况。 实验环境 fastjson1.2.4 jdk8u91 dbcp 9.0.20 什么是BCEL BCEL的全名应该是…...

vue2 中使用 Ag-grid-enterprise 企业版

文章目录 问题Vue2 引入企业版不生效npm run dev 时卡住了94% after seal 卡在这里了测试打包源 git 解决方案记录 问题 我想用企业版的树状表格 Vue2 引入企业版不生效 编译引入 // vue.config.js module.exports {transpileDependencies: ["ag-grid-enterprise"…...

FanControl终极指南:5步解决Windows风扇噪音与过热难题

FanControl终极指南&#xff1a;5步解决Windows风扇噪音与过热难题 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...

芯片设计演进:从摩尔定律到软件驱动与异构集成的工程实践

1. 项目概述&#xff1a;一位芯片老兵的CMOS缩放宣言在半导体这个日新月异的行业里&#xff0c;每隔几年就会听到“摩尔定律已死”的论调。这几乎成了一个周期性出现的“行业寓言”。但如果你在2014年&#xff0c;有机会和吉姆凯勒&#xff08;Jim Keller&#xff09;——这位先…...

资源受限场景下基于强化学习的自适应AI安全框架设计与实践

1. 项目概述&#xff1a;当AI安全遇上资源与伦理的双重挑战最近和几位在非洲做技术援助的朋友聊起他们的工作&#xff0c;他们提到一个很有意思的困境&#xff1a;在乌干达这样的地区&#xff0c;网络安全监测的需求日益增长&#xff0c;但本地计算资源极其有限&#xff0c;网络…...

工控人必备技能:VMware虚拟机+Win10+博途V15完整开发环境搭建实录(从镜像下载到PLC在线)

工控工程师的移动工作站&#xff1a;VMwareWin10博途V15全栈开发环境实战指南 在工业自动化领域&#xff0c;能够随时随地进行PLC程序开发和调试的能力已经成为工程师的核心竞争力。想象这样一个场景&#xff1a;深夜接到产线紧急故障通知&#xff0c;而你的开发环境却锁在办公…...

3步解决Dell G15散热难题:TCC-G15开源散热控制工具完全指南

3步解决Dell G15散热难题&#xff1a;TCC-G15开源散热控制工具完全指南 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 你是否正在为Dell G15笔记本的过热问题…...

基于RAG与LangChain的AI阅读助手BookWith架构与实现

1. 项目概述&#xff1a;当AI成为你的阅读伙伴作为一名深度阅读爱好者和技术实践者&#xff0c;我一直在寻找一种能真正“理解”内容&#xff0c;并与我进行深度对话的阅读工具。传统的电子书阅读器&#xff0c;无论是Kindle还是其他应用&#xff0c;本质上都只是将纸质书数字化…...

ComfyUI视频处理终极指南:3步搭建AI视频生成工作流

ComfyUI视频处理终极指南&#xff1a;3步搭建AI视频生成工作流 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 在AI图像生成领域&#xff0c;ComfyUI以其强大的节…...

别再死磕梯形图了!IEC61131-3的ST语言实战:用5分钟搞定一个PID功能块

别再死磕梯形图了&#xff01;IEC61131-3的ST语言实战&#xff1a;用5分钟搞定一个PID功能块 当PLC工程师第一次接触结构化文本&#xff08;ST&#xff09;时&#xff0c;往往会被它类似高级编程语言的语法吓退。但事实上&#xff0c;ST在处理复杂算法时的简洁性和高效性&#…...

第1篇:认识Go——我的第一个程序 Go中文编程

第1篇&#xff1a;认识Go——我的第一个程序**作者&#xff1a;**中文编程倡导者—— 李金雨 联系方式&#xff1a; wbtm2718qq.com目标&#xff1a;让你成功运行第一个Go程序&#xff0c;建立学习信心&#xff01; 预计时间&#xff1a;2课时&#xff08;90分钟&#xff09; 难…...

AI工作流框架实战:从脚本到自动化流程的架构设计与应用

1. 项目概述&#xff1a;当AI遇上工作流最近在折腾自动化工具链&#xff0c;发现一个挺有意思的项目叫ai-flow。这名字听起来就挺直白&#xff0c;AI 工作流。简单来说&#xff0c;它就是一个用代码来编排和自动化AI任务&#xff08;比如调用大语言模型、处理数据、执行特定操…...